Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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 使用组\u CONCAT的SQL查询产生意外结果_Php_Mysql_Sql - Fatal编程技术网

Php 使用组\u CONCAT的SQL查询产生意外结果

Php 使用组\u CONCAT的SQL查询产生意外结果,php,mysql,sql,Php,Mysql,Sql,我对sql查询有问题,我不确定我做错了什么。无论如何,让我解释一下: 最初,这是原始查询: 选择cl.*, c、 id,c.type, c、 名字, c、 姓, c、 工作, c、 公司, c、 董事会公司编号:, dc.id,dc.name, 联系人列表中的es.id\u联系人cl cl.contact上的内部连接触点c\U id=c.id 在dc.id=c.directorycompany\u id上左键加入directorycompany dc 在es.id=c.expertsection

我对
sql
查询有问题,我不确定我做错了什么。无论如何,让我解释一下:

最初,这是原始查询:

选择cl.*,
c、 id,c.type,
c、 名字,
c、 姓,
c、 工作,
c、 公司,
c、 董事会公司编号:,
dc.id,dc.name,
联系人列表中的es.id\u联系人cl
cl.contact上的内部连接触点c\U id=c.id
在dc.id=c.directorycompany\u id上左键加入directorycompany dc
在es.id=c.expertsection\u id上左连接expertsection es
其中cl.contactlist_id=36311
按dc姓氏排序
该语句从id为X的contactlist表中获取所有详细信息。它返回的信息是contactlist表中每个联系人的一行,以及他们工作的公司(directorycompany)的信息和contact表中联系人的各种其他详细信息。因此,信息如下所示:

contactlist\u id contact\u id active id type firstname姓氏职务公司董事公司id name id
36311 1939 316955375 1 1939目录乔·布洛格斯副编辑786 786先驱人物0
36311 1935 316955374 1 1935目录Jim Bloggs广告经理786 786先驱人物0
36311 28034 316955373 1 28034目录Jay Bloggs新闻记者786 786先驱人物0
然后我去尝试修改上面的
SQL
,因为需要额外的功能,但我看到了不想要的结果。基本上,我正在尝试加入其他3个表

  • 目录栏
  • 目录副刊
  • 董事会计划
其想法是,它将返回联系人列表中联系人也编写的所有专栏、补充和节目。还需要指出的是,在某些情况下,联系人可能编写了不止一列、补充或程序,因此我理想情况下希望将其显示在与联系人相同的行中,而不是重复这些行,因此我使用了
GROUP_CONCAT()
函数

这是修改后的
SQL

选择cl.*,
c、 身份证,
c、 类型,
c、 名字,
c、 姓,
c、 工作,
c、 公司,
c、 董事会公司编号:,
dc.id,dc.name,
E.id,
集团名称(目录名)为gcname,
集团公司(董事名称)作为gpname,
组名称(目录名称)为gsname
从联系人列表\u联系人cl
cl.contact上的内部连接触点c\U id=c.id
在dc.id=c.directorycompany\u id上左键加入directorycompany dc
在es.id=c.expertsection\u id上左连接expertsection es
dirc.directorycontact\u id=c.id上的左连接目录列dirc
在dirp.directorycontact_id=c.id上左连接directoryProgram dirp
左连接目录补充目录上的目录。目录联系人\u id=c.id
其中cl.contactlist_id=36311
按dc姓氏排序
这将返回:

contactlist\u id contact\u id active id type firstname姓氏职务公司董事公司\u id name id id gcname gpname gsname
36311 28034 316955373 1 28034目录Jay Bloggs新闻记者786 786先驱人物0艺术现场,农业\N\N

所以我的问题是,其他两个结果去了哪里,为什么没有显示出来?还有,为什么gcname中的信息显示用于此联系人,而事实上它与id为1939的联系人相关?如果删除GROUP CONCAT,它将显示正确的记录,因为使用此函数时,应该有GROUP BY子句。目前,它将考虑所有记录作为一个单一的组。< / P>
如果您查看gcname中的值是多个,这是正确的。

Group\u concat是其中的一部分。这意味着它将所有相等的值组合到一行中,在您的情况下,所有三列都具有相同的值,这就是为什么您只能得到一个结果。使用groupby你希望得到什么样的结果?

也许可以添加一个
groupby
子句?如果我用
groupby
替换
ORDER BY
,它也只返回一个结果。我建议
groupby contact\u id
,因为乔、吉姆和杰伊的姓氏相同,你不希望他们都只有一行,对吧?