Avatar billede nemlig Professor
24. april 2011 - 21:24 Der er 7 kommentarer og
1 løsning

Udtræk fra MySQL og liste grupperet

Hejsa. En lille udfordring, som driller mig.
Jeg har en tabel, hvor der fx er 2 felter i hver post.

Felt1 = `lokalenr`
Felt2 = `dato`

Jeg ønsker at liste alle posterne sorteret/grupperet således alle poster med samme `lokalenr` listes under hinanden. I eksemplet herunder, er der tale om i alt 6 poster med datoer, og 2 forskellige lokalenumre.

Jeg hiver ud af MySQL sådan her:

$sql = "SELECT * FROM `tabel` WHERE `type`='0' ORDER BY `lokalenr` ASC";
$res = database($sql);
while($row = mysql_fetch_assoc($res))

--------------------
| $row['lokalenr'] | fx 1
--------------------
| $row['dato']    | fx 2011-01-01
--------------------
| $row['dato']    | fx 2011-01-15
--------------------
| $row['dato']    | fx 2011-01-25
--------------------
| $row['lokalenr'] | fx 2
--------------------
| $row['dato']    | fx 2011-01-02
--------------------
| $row['dato']    | fx 2011-01-11
--------------------
| $row['dato']    | fx 2011-01-25
--------------------
Avatar billede wanze Nybegynder
24. april 2011 - 21:54 #1
Det du leder efter er nok GROUP BY `lokalenr`.
Avatar billede nemlig Professor
24. april 2011 - 21:59 #2
Ja, det er det nok, men hvordan hulen lister jeg posterne, således der i linje 1 vises det første lokalenr. og derunder de forskellige posters datoer, der har samme lokalenr.
Herefter skal næste lokalenr. stå på en linje for sig og de tilsvarende datoer.
Altså samme princip som vist i spørgsmålet.
Avatar billede wanze Nybegynder
24. april 2011 - 22:06 #3
OK, ja det kan løses med GROUP BY, men ORDER BY er en bedre løsning.

Det handler vel bare om, at når du udskriver det i PHP, så kontrollerer du om det foregående element også var i samme lokalenr, og hvis ikke, så udskriver du lokalenr. Den forespørgsmål du allerede bruger burde være fin nok.

Det du søger er noget i stil med:

$lokalenr = null;
while ($row = mysql_fetch_assoc($res))
{
  if ($row['lokalenr'] != $lokalenr)
  {
    print "<h1>Lokale: $lokalenr</h1>\n";
    $lokalenr = $row['lokalenr'];
  }
  print $row['dato']."<br/>\n";
}
Avatar billede jakobdo Ekspert
24. april 2011 - 22:04 #4
Du skal lave noget ala:

$lokalenr = NULL;
$sql = "SELECT * FROM `tabel` WHERE `type`='0' ORDER BY `lokalenr` ASC";
$res = database($sql);
while($row = mysql_fetch_assoc($res)){
if($row['lokalenr'] != $lokalenr={
echo $lokalenr .'<br />';
$lokalenr = $row['lokalenr'];
}
echo $row['dato'].'<br />';
}
Avatar billede nemlig Professor
24. april 2011 - 22:07 #5
#3 Det ligner noget, jeg skal prøve. Jeg går straks i gang.
Avatar billede nemlig Professor
24. april 2011 - 22:30 #6
Det fungerer - det burde jeg nok selv have regnet ud... :(

Jeg skulle dog lige rette denne linje:

echo $lokalenr .'<br />' til

echo $row['lokalenr'] .'<br />'

Men det var ret indlysende.

Jakobdo kom først med løsningen - send venligst et svar.
Avatar billede jakobdo Ekspert
24. april 2011 - 22:39 #7
Svar!
Avatar billede jakobdo Ekspert
25. april 2011 - 07:08 #8
Takker for point.
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