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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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