PHPでSQL結合の結果を単一の列でソートする方法
質問
場所のリストを含むデータベースがあります。例:
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>';
所属していません StackOverflow