Php 在对两个表进行联接的查询中使用MySQL中的GROUPBY时出现问题
我有两个MySQL表,$database1和$database2。两者都有一个名为ID的字段。我使用GET将一个城镇的名称传递给该文件,也就是说,它位于包含此代码的PHP文件的URL中 我可以运行此查询Php 在对两个表进行联接的查询中使用MySQL中的GROUPBY时出现问题,php,mysql,sql,mysql-error-1062,Php,Mysql,Sql,Mysql Error 1062,我有两个MySQL表,$database1和$database2。两者都有一个名为ID的字段。我使用GET将一个城镇的名称传递给该文件,也就是说,它位于包含此代码的PHP文件的URL中 我可以运行此查询 $PlaceName = $_GET['townName']; $PlaceName = mysql_real_escape_string($PlaceName); $sql="SELECT * from $database1 LEFT JOIN $database2 on $database
$PlaceName = $_GET['townName'];
$PlaceName = mysql_real_escape_string($PlaceName);
$sql="SELECT * from $database1 LEFT JOIN $database2 on $database1.ID = $database2.ID WHERE PlaceName='$PlaceName'";
$query = mysql_query($sql);
echo '<h1>People who are searching for '.$PlaceName.':</h1>';
echo '<ul>';
while ($row = mysql_fetch_array($query)) {
echo "<li>ID #",$row['ID'],": ",$row['MemberPersonalName']," ",$row['MemberSurname']," -- searching for ",$row['SurnameBeingSearched'],"</li>";
}
echo '</ul>';
…而且一切正常。现在输出结果如下所示
SELECT places_tbl.name, GROUP_CONCAT(people_tbl.name)
FROM places_tbl
LEFT JOIN people_tbl ON (places_tbl.id = people_tbl.id)
GROUP BY places_tbl.id
正在搜索霍格沃茨的人:
ID 137:赫敏·格兰杰-寻找斯特恩
ID 137:赫敏·格兰杰-寻找恩格尔伯格
ID 503:哈利波特-寻找克林德勒
ID 549:Ron Weasley-寻找Kreindler
ID 1062:德拉科·马尔福-寻找恩格尔伯格
ID 1155:金妮·韦斯莱-寻找克林德勒
ID 1155:金妮·韦斯莱-寻找史翠珊
但是输出需要调整,我在编写SQL查询语句以反映更改时遇到了问题。我真正想要的是输出像这样
SELECT places_tbl.name, GROUP_CONCAT(people_tbl.name)
FROM places_tbl
LEFT JOIN people_tbl ON (places_tbl.id = people_tbl.id)
GROUP BY places_tbl.id
正在搜索霍格沃茨的人:
赫敏·格兰杰身份证137和德拉科·马尔福身份证1062正在搜查恩格伯格
克林德勒的身份证号为503,罗恩·韦斯莱的身份证号为549,金妮·韦斯莱的身份证号为1155
斯特恩正被身份证号137的赫敏·格兰杰搜查
金妮·韦斯莱正在搜查史翠珊,身份证1155
换言之,我需要按“姓氏搜索”字段将输出分组,我需要以X、Y和Z输出格式列出进行搜索的人员的姓名,如果需要,根据结果的数量,它知道在哪里添加逗号,并且我需要按“姓氏搜索”字段对结果进行排序
帮忙?谢谢 您需要列出名称,这样就不会出现SQL感知问题中的聚合。保留当前查询。您必须在代码中进行分组 比如:
$rows = array();
$last = '';
while ($row = mysql_fetch_array($query)) {
$surname = $row['SurnameBeingSearched'];
$id = $row['ID'];
$name = $row['MemberPersonalName'];
if ($last != $surname) {
$last = $surname;
$rows[] = array();
}
$rows[count($rows)-1][$id] = $name;
}
foreach ($rows as $row) {
// now display each group of names
}
您还可以使用MySQL GROUP_CONCAT函数 它看起来像这样
SELECT places_tbl.name, GROUP_CONCAT(people_tbl.name)
FROM places_tbl
LEFT JOIN people_tbl ON (places_tbl.id = people_tbl.id)
GROUP BY places_tbl.id
默认情况下,GROUP_CONCAT以逗号分隔的形式返回值。您可以根据需要拆分它们以获得格式,或者使用SEPARATOR关键字。GROUP_CONCAT字段名称分隔符“-”,我认为GROUP_CONCAT应该用于people_tbl.name,因此它将返回“Hemione Granger,Draco Malfoy”和GROUP BY places_tbl.name