Avatar billede straszek Praktikant
05. maj 2004 - 14:07 Der er 10 kommentarer og
1 løsning

sortering af mysql udtryk - problem

For at får et output der giver følgende:
Skole A:
  Klasse a1
    medlemmer
  Klasse a2
    medlemmer

Skole B:
  Klasse b1
    medlemmer
  Klasse b2
    medlemmer

Har jeg lavet nedenstående kode, hvor $findmed er det sql udtryk der finder medlemmerne:

$kategori="dummyværdi";
$kategori2="dummyværdi2";
  while ($row=mysql_fetch_array($findmed)) {
      if ($kategori!=$row['skole']) {
        $kategori=$row['skole'];
        print "<p><font size=-2><b>$row[skole]</b><br>";
      }
      if ($kategori2!=$row['klasse']) {
        $kategori2=$row['klasse'];
        print "<p><font size=-1><b>$row[klasse]</b><br>";
      }
    echo "<font size=-2>$row[medlem_fornavn] $row[medlem_efternavn]<br>";

Det virker næsten efter hensigten, men hvis der på en skole kun er medlemmer fra en klasse, så bliver denne linje ikke lavet:
print "<p><font size=-1><b>$row[klasse]</b><br>";

Hvor går det galt?
Avatar billede sostack Nybegynder
05. maj 2004 - 14:16 #1
Prøv at komme med hele koden, for umiddelbart ser der ikke ud til at være fejl i det viste....

//sostack
Avatar billede straszek Praktikant
05. maj 2004 - 14:18 #2
$findmed = mysql_query("select medlemmer.*, udd_inst.udd_inst_navn, med_org.med_org_navn  from medlemmer, udd_inst, med_org  where medlemmer.medlem_status ='aktiv' and  medlemmer.medlem_underskrift <> '' and medlemmer.medlem_indalder='under' and medlemmer.medlem_indmeldt and
medlemmer.medlem_indmeldt>='$rowaar[aar_start]' and medlemmer.medlem_indmeldt<='$rowaar[aar_slut]'
and medlemmer.medlem_udd_inst=udd_inst.id and med_org.id=medlemmer.medlem_med_org  order by medlemmer.medlem_udd_inst, medlemmer.medlem_med_org") or die(mysql_error());

   
    $kategori="dummyværdi";
    $kategori2="dummyværdi2";
  while ($row=mysql_fetch_array($findmed)) {
      if ($kategori!=$row['udd_inst_navn']) {
        $kategori=$row['udd_inst_navn'];
        print "<p><font size=-2><b>$row[udd_inst_navn]</b><br>";
      }
      if ($kategori2!=$row['med_org_navn']) {
        $kategori2=$row['med_org_navn'];
        print "<p><font size=-1><b>$row[med_org_navn]</b><br>";
      }
    echo "<font size=-2>$row[medlem_fornavn] $row[medlem_efternavn]<br>";

 
    }
Avatar billede sostack Nybegynder
05. maj 2004 - 14:41 #3
det må have noget med din udvælgelse at gøre, evt. din ORDER BY, for dette virker, med kun 1 klasse pr. skole:
<?php
$row[0]['udd_inst_navn'] = "Vestre";
$row[1]['udd_inst_navn'] = "Søndre";
$row[2]['udd_inst_navn'] = "Østre";
$row[3]['udd_inst_navn'] = "Nordre";
$row[0]['med_org_navn'] = "klasse1a";
$row[1]['med_org_navn'] = "klasse1b";
$row[2]['med_org_navn'] = "klasse2a";
$row[3]['med_org_navn'] = "klasse2b";
$row[0]['medlem_fornavn'] = "Peder";
$row[1]['medlem_fornavn'] = "Ole";
$row[2]['medlem_fornavn'] = "Jens";
$row[3]['medlem_fornavn'] = "Hans";
$row[0]['medlem_efternavn'] = "Pedersen";
$row[1]['medlem_efternavn'] = "Olsen";
$row[2]['medlem_efternavn'] = "Jensen";
$row[3]['medlem_efternavn'] = "Hansen";
$rows = 0;
$kategori="dummyværdi";
    $kategori2="dummyværdi2";
  while ($rows < 4) {
      if ($kategori!=$row[$rows]['udd_inst_navn']) {
        $kategori=$row[$rows]['udd_inst_navn'];
        print "<p><font size=-2><b>". $row[$rows]['udd_inst_navn'] . "</b><br>";
      }
      if ($kategori2!=$row[$rows]['med_org_navn']) {
        $kategori2=$row[$rows]['med_org_navn'];
        print "<p><font size=-1><b>" . $row[$rows]['med_org_navn'] . "</b><br>";
      }
    echo "<font size=-2>" . $row[$rows]['medlem_fornavn'] . " " . $row[$rows]['medlem_efternavn'] . "<br>";
    $rows++;
 
    }
?>

//sostack
Avatar billede sostack Nybegynder
05. maj 2004 - 14:43 #4
Prøv derefter med:
$row[0]['udd_inst_navn'] = "Vestre";
$row[1]['udd_inst_navn'] = "Vestre";
$row[2]['udd_inst_navn'] = "Vestre";
$row[3]['udd_inst_navn'] = "Vestre";
$row[0]['med_org_navn'] = "klasse1a";
$row[1]['med_org_navn'] = "klasse1a";
$row[2]['med_org_navn'] = "klasse2a";
$row[3]['med_org_navn'] = "klasse2b";
$row[0]['medlem_fornavn'] = "Peder";
$row[1]['medlem_fornavn'] = "Ole";
$row[2]['medlem_fornavn'] = "Jens";
$row[3]['medlem_fornavn'] = "Hans";
$row[0]['medlem_efternavn'] = "Pedersen";
$row[1]['medlem_efternavn'] = "Olsen";
$row[2]['medlem_efternavn'] = "Jensen";
$row[3]['medlem_efternavn'] = "Hansen";

og se hvad der sker..

//sostack
Avatar billede straszek Praktikant
05. maj 2004 - 14:43 #5
Jeg forstår ikke hvad du mener med ovenstående?!
Avatar billede sostack Nybegynder
05. maj 2004 - 14:46 #6
Jeg gad ikke lave en database magen til din, derfor lavede jeg nogle ekelte "rækker" med data i, som jeg looper igennem. Med disse data kan jeg konstatere, at dine if-sætninger virker efter hensigten, og at det derfor må være din udvælgelse eller din sortering det går galt med. Prøv at gæøre forespørgslen mere enkel, til testformål.

//sostack
Avatar billede jakoba Nybegynder
05. maj 2004 - 15:07 #7
$findmed = mysql_query("
    SELECT medlemmer.*,
          udd_inst.udd_inst_navn,
          med_org.med_org_navn
    FROM  ( medlemmer
            JOIN udd_inst ON medlemmer.medlem_udd_inst = udd_inst.id )
          JOIN med_org ON medlemmer.medlem_med_org = med_org.id
    WHERE medlemmer.medlem_status = 'aktiv'
      AND medlemmer.medlem_underskrift <> ''
      AND medlemmer.medlem_indalder = 'under'
      AND medlemmer.medlem_indmeldt                          # overflødig linie  §3
      AND medlemmer.medlem_indmeldt >= '$rowaar[aar_start]'  # fare  §2
      AND medlemmer.medlem_indmeldt <= '$rowaar[aar_slut]'
    ORDER BY medlemmer.medlem_udd_inst,                      # vist fejl  §1
            medlemmer.medlem_med_org
") or die(mysql_error());

Jeg har stillet din SQL kommando op så den er lidt mere læselig.

Og det der falder i øjnene er:

§1: i din ORDER BY sorterer du efter .id felterne i udd_inst og med_org, ikke efter udd_inst_navn og med_org_navn. Det betyder at dine rækker sandsynligvis sorteres efter den rækkefølge de blev oprettet i.

§2: et farepunkt er feltet medlem_indmeldt hvor din WHERE clause kan fejle hvis ikke du har sørget for at skrive data i yyyymmdd format.

§3: hvis feltet er NULL vil der ikke komme true på nogen af betingelserne nedenunder

mvh JakobA
Avatar billede straszek Praktikant
05. maj 2004 - 15:22 #8
tak for kommentaren:

Vedr: §1, jeg har valgt denne sortering for at få et output der finder alle medlemmer der høre til en en given udd.institution dernæst skal der opdeles så medlemmer til denne udd.institution fordeles på de forskellige medlems organisationer der er. Det virker som sagt fint, så længe der er mere end en
medlems organisationer repæsenteret på en udd.institution. Det ganske sikkert her fejlen ligger - jeg ved bare ikke hvad jeg skal gøre ved det?!
   

vedr: §2, så er datoen skrevet i unixtimestamp format og det ser ikke ud til at der er nogle problemer her

vedr §3, så er linje en fejl, den er nu slettet, ud at det gør en forskel
Avatar billede straszek Praktikant
05. maj 2004 - 15:43 #9
Jeg har brug for at få dette til at virke snarest. Så al hjælpe er forslag til en anden måde at gøre det på, er mere end velkomne.


Søren
Avatar billede straszek Praktikant
05. maj 2004 - 16:04 #10
Hurra

Problemet var ikke i min order by. Nedenstående gave det rigtige resultat:
$kategori="dummyværdi";
      while ($row=mysql_fetch_array($findmed)) {
      if ($kategori!=$row['udd_inst_navn']) {
        $kategori=$row['udd_inst_navn'];
        print "<p><font size=-1><b>$row[udd_inst_navn]</b><br>";
      $kategori2="dummyværdi";
      }
       
      if ($kategori2!=$row['med_org_navn']) {
        $kategori2=$row['med_org_navn'];
        print "<p><font size=-2><b>$row[med_org_navn]</b><br>";
      }
    echo "<font size=-2>$row[medlem_nummer] $row[medlem_fornavn] $row[medlem_efternavn] $row[med_org_navn]<br>";
Avatar billede straszek Praktikant
07. maj 2004 - 10:33 #11
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester