PHP nasıl tek bir sütuna göre katılabilir, bir SQL sonucu sıralarım

1 Cevap php

Ben mesela yerlerin listesini içeren bir veritabanı var:

C_ID   |   Name 

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

ve ayrı bir tabloda, bu ülkelerden gelen insanların bir listesini,

P_ID  |  Name   |  C_ID

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

Ben bir birleşim ile bir SQL sorgusu bu verileri kaptı ...

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

Hangi bana sağlar:

Italy John
Italy Mark
Germany Paul
Germany Alan
France Pierre

Ancak, ne ben başarmak için çalışıyorum PHP tarafından yankılandı, bir sırasız liste. Insanlar isimleri ile grouped by country name. Tekrarlanır ülke adının aksine. PHP / MySQL bilgim beni icar ancak diziler kullanarak denedim ...

1 Cevap

Deneyin:

$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] ülke, $row[1] kişinin adıdır. while döngüsünde fonksiyon burada anahtarıdır. Bu oldukça çok şey yok. Temelde ülke adını anahtarlı sonuç dizisine bir girdi ekler ve orada saklar diziye kişinin adını ekler.

Edit: bir liste olarak sipariş etmek için:

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