У меня есть база данных со списком местоположений, например:
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 позволяют мне...
Try:
$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>';