質問

場所のリストを含むデータベースがあります。例:

C_ID   |   Name 

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

および別のテーブルに、それらの国の出身者のリスト、

P_ID  |  Name   |  C_ID

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

結合を使用してSQLクエリでこのデータを取得しました...

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";

以下を提供します:

Italy John
Italy Mark
Germany Paul
Germany Alan
France Pierre

しかし、私が達成しようとしているのは、PHPによってエコーアウトされる順序付けられていないリストです。人々の名前が国名でグループ化されている。国名が繰り返されるのとは対照的に。配列を使用しようとしましたが、PHP / MySQLの知識が私を失望させました...

役に立ちましたか?

解決

試してください:

$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] は国、 $ row [1] は人の名前です。ここでは、 while ループ内の関数が重要です。これは非常に多くのことを行います。基本的に、国名をキーとする結果配列にエントリを追加し、そこに格納されている配列に人の名前を追加します。

編集:リストとして注文するには:

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>';
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top