문제

위치 목록이있는 데이터베이스가 있습니다.

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