繁体   English   中英

如何通过PHP中的单个列对SQL连接的结果进行排序

[英]How do I sort the result of an SQL join by a single column in 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的了解让我失望...

尝试:

$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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM