2009-11-28 1 views
0

У меня есть база данных со списком мест, например:Как сортировать результат в SQL соединит одного столбца в PHP

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 выпускающая меня ...

ответ

1

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. Это довольно много. Он в основном добавляет запись в массив результатов с именем страны и добавляет имя человека в массив, который он хранит там.

Edit: Чтобы заказать в виде списка:

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>'; 
+0

да это группы Соединить именно так, как мне нужно, спасибо muchly. Как это можно заказать сейчас? т. е. стиль Извините за то, что вы такой noob ... – Ash

+0

Добавленный код предоставляет только один ребенок для каждого родителя, а не правильное количество детей. – Ash

+0

P.S. Спасибо за объяснение, чтобы пойти с кодом. – Ash