Avatar billede bellmadsen Nybegynder
03. maj 2016 - 19:53 Der er 8 kommentarer og
1 løsning

Hjælp til group by MySQL/PHP

Hej eksperter!

Jeg står i en situation hvor jeg skal bruge noget hjælp. For sjov, er jeg gået igang med, at lave en side ala just-eat(dno why). I den forbindelse skal jeg have en liste med alle restaurenter udfra en database. Disse restaurenter skal indeles i postnumre.

Indtil videre ser min SQL således ud:

SELECT * FROM location ORDER BY zipcode ASC

Ja det er ikke meget :D

Mit output skulle gerne være således fx:

Postnummer: 2300
Vivaldi Amagerbrogade
Halifax Sundby

Postnummer: 2770
Dalle Valle

Så alle med de samme postnumre bliver udskrevet under hinanden i den samme while løkke. Jeg laver det ikke i OOP PHP.

Håber i kan hjælpe
Avatar billede erikjacobsen Ekspert
03. maj 2016 - 19:58 #1
Det er en fin select sætning. Du skal ikke bruge group by her.

Du skal tænke på at have en variabel, der kan holde den nuværende zip-kode, og hvis den ændrer sig, så skrive den ud. Omvendt, hvis den ikke ændrer sig skal du ikke gøre noget. Sådan ca.:

$oldzip="";
while ($row=.....) {
  if ($oldzip!=$row['zip']) {
    $oldzip = $row['zip'];
    print "<h2>$oldzip</h2>";
  }
  print ...oplysningerne
}
Avatar billede bellmadsen Nybegynder
03. maj 2016 - 20:03 #2
Det giver dette output:

Postnummer: 2300
Vivaldi Amagerbrogade

Postnummer: 2300
Halifax Sundby

Postnummer: 2770
Dalle Valle
Avatar billede erikjacobsen Ekspert
03. maj 2016 - 20:10 #3
Det skal det ikke gøre. Hvad er din kode?
Avatar billede erikjacobsen Ekspert
03. maj 2016 - 20:10 #4
Jah, jeg har skrevet flere steder:  $row['zip']  som sikkert skal være  $row['zipcode']
Avatar billede bellmadsen Nybegynder
03. maj 2016 - 20:11 #5
$oldzip = "";
        $query = "SELECT * FROM location ORDER BY zipcode ASC";
        $result = mysql_query($query) or die(mysql_error());
        while($row = mysql_fetch_array($result))
        {
        if($oldzip != $row['zipcode'])
        {
            $oldzip = row['zipcode'];
            echo $oldzip. "<br>";
        }
        else
        {
            break;
        }
        echo "
            <div class='alert alert-warning clearfix'>
                <a href='#' class='pull-left'><strong>". $row['name']."</strong></a>
                <a class='btn btn-info btn-sm pull-right'>Vælg</a>
            </div>
        ";
        }
Avatar billede bellmadsen Nybegynder
03. maj 2016 - 20:12 #6
Det er så uden else { break; }
Avatar billede erikjacobsen Ekspert
03. maj 2016 - 20:25 #7
Du bør nok ændre
    $oldzip = row['zipcode'];
til
    $oldzip = $row['zipcode'];
Avatar billede bellmadsen Nybegynder
03. maj 2016 - 20:32 #8
Wow. Lang arbejdsdag gør underværker. Tak!
Avatar billede erikjacobsen Ekspert
03. maj 2016 - 20:48 #9
Super. Accepter blot dine egne svar.
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

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