Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在对两个表进行联接的查询中使用MySQL中的GROUPBY时出现问题_Php_Mysql_Sql_Mysql Error 1062 - Fatal编程技术网

Php 在对两个表进行联接的查询中使用MySQL中的GROUPBY时出现问题

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

我有两个MySQL表,$database1和$database2。两者都有一个名为ID的字段。我使用GET将一个城镇的名称传递给该文件,也就是说,它位于包含此代码的PHP文件的URL中

我可以运行此查询

$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