Frage

Ich habe eine Datenbank mit einer Liste von Orten z.

C_ID   |   Name 

1      |   Italy
2      |   Germany
3      |   France
4      |   Spain

und in einer separaten Tabelle, eine Liste von Personen, die aus diesen Ländern sind,

P_ID  |  Name   |  C_ID

1     | John    | 1
2     | Mark    | 1
3     | Paul    | 2
4     | Pierre  | 3
5     | Alan    | 2

Ich habe diese Daten in einer SQL-Abfrage greift mit einem Join ...

SELECT locations.name as locaname, people.name as peoplename
FROM locations
INNER JOIN people
ON locations.c_id=people.c_id
ORDER BY locations.name";

Was bietet mir:

Italy John
Italy Mark
Germany Paul
Germany Alan
France Pierre

Aber was ich versuche, ist eine ungeordnete Liste zu erreichen, von PHP Echo aus. Mit den Menschen Namen nach Ländernamen gruppiert . In Bezug auf die Ländernamen im Gegensatz wiederholt. Ich habe versucht, Arrays aber meine Kenntnisse von PHP / MySQL lassen mich auf ...

War es hilfreich?

Lösung

Versuchen:

$sql = <<<END
SELECT locations.name as locaname, people.name as peoplename
FROM locations
INNER JOIN people
ON locations.c_id=people.c_id
ORDER BY locations.name"
END;
$query = mysql_query($query) or die($sql . ' - ' . mysql_error());
$result = array();
while ($row = mysql_fetch_array($query)) {
  $result[$row[0]][] = $row[1];
}
print_r($result);

$row[0] ist das Land, $row[1] den Namen der Person ist. Die Funktion in der while Schleife ist der Schlüssel hier. Dies macht eine ganze Menge. Sie fügt hinzu, im Grunde einen Eintrag in das Ergebnis-Array nach Ländernamen eingegeben und fügt den Namen der Person in das Array es dort speichert.

Edit: als eine Liste bestellen:

echo '<ul>';
foreach ($result as $country => $persons) {
  echo "<li>$country\n<ul>\n";
  foreach ($persons as $person) {
    echo "<li>$person</li>\n";
  }
  echo "</ul></li>\n";
}
echo '</ul>';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top