Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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 SQL搜索结果,按ID编号分组_Php_Sql_Search_Group By - Fatal编程技术网

Php SQL搜索结果,按ID编号分组

Php SQL搜索结果,按ID编号分组,php,sql,search,group-by,Php,Sql,Search,Group By,我在尝试修复此SQL查询时遇到一些问题 这是一个自定义搜索查询,在CMS系统的所有页面上搜索“婚礼”一词 目前,我看到同一页出现在前5行,因为“婚礼”一词出现了5次。我想做的是将具有相同ID号的行组合成一行,这样它就不会出现多次 我原以为在这条语句的末尾使用GROUPBY可以做到这一点,但我一直得到一个SQL语法错误 GROUP BY `documents`.`id` 我已经附上了完整的SQL bellow和我目前得到的输出的图像。。。。有什么想法吗 SELECT `documents`.*,

我在尝试修复此SQL查询时遇到一些问题

这是一个自定义搜索查询,在CMS系统的所有页面上搜索“婚礼”一词

目前,我看到同一页出现在前5行,因为“婚礼”一词出现了5次。我想做的是将具有相同ID号的行组合成一行,这样它就不会出现多次

我原以为在这条语句的末尾使用GROUPBY可以做到这一点,但我一直得到一个SQL语法错误

GROUP BY `documents`.`id`
我已经附上了完整的SQL bellow和我目前得到的输出的图像。。。。有什么想法吗

SELECT `documents`.*, 
`documenttypes`.`name` as `doctype`, 
`articles`.`id` as `article_id`, 
`articles`.`language_id`, 
`articles`.`title`, 
`articles`.`template`, 
`articles`.`slug`, 
`articles`.`path`, 
`articles`.`slug_title`,
MATCH ( elements.textvalue )AGAINST ( 'weddings' ) AS score, 
elements.textvalue AS matching, 
LOWER(`articles`.`title`) 
LIKE '%weddings%' as 'like_title', 
( MATCH ( elements.textvalue ) 
AGAINST ( 'weddings' ) ) + IF(( LOWER(`articles`.`title`) 
LIKE '%weddings%'),1, 0) + IF((LOWER(`elements`.`textvalue`) 
LIKE '%weddings%'),1, 0) as total FROM (`documents`) 
LEFT JOIN `articles` ON `articles`.`document_id` = `documents`.`id` 
LEFT JOIN `documenttypes` ON `documents`.`documenttype_id` = `documenttypes`.`id` 
LEFT JOIN `documents_users` AS du ON `documents`.`id` = du.`document_id` 
LEFT JOIN `documents_usergroups` AS dug ON `documents`.`id` = dug.`document_id`
LEFT JOIN elements ON `elements`.`article_id` = `articles`.`id` 
WHERE `documents`.`trashed` = 0 
AND `documents`.`published` = 1 
AND `articles`.`status_id` = 1 
AND `articles`.`language_id` = 1 
AND (`documents`.`no_search` = '0' 
OR `documents`.`no_search` IS NULL) 
AND ( (dug.usergroup_id IS NULL) 
AND (du.user_id IS NULL) ) 
AND (`documents`.`startdate` < NOW() 
OR `documents`.`startdate` = '0000-00-00 00:00:00' OR `documents`.`startdate` IS NULL) 
AND (`documents`.`enddate` > NOW() 
OR `documents`.`enddate` = '0000-00-00 00:00:00' 
OR `documents`.`enddate` IS NULL) 
HAVING (total > 0) 
ORDER BY label ASC, 
total DESC LIMIT 0,10
选择“文档”。*,
`documenttypes`.`name`作为`doctype`,
`文章`.`id`作为`文章`.`id`,
`文章`.`language\u id`,
`文章`.`标题`,
`文章`.`模板`,
`文章`.`slug`,
`冠词`.`path`,
`文章`.`slug_title`,
将(elements.textvalue)与(‘婚礼’)匹配作为分数,
elements.textvalue作为匹配项,
较低(`articles`.`title`)
将“%weddings%”作为“LIKE_title”,
(匹配(elements.textvalue)
反对('weddings'))+IF((较低('articles`.'title`)
与“%weddings%”类似,1,0)+IF((较低(`elements`.`textvalue`)
与“%weddings%”类似,1,0)作为来自(`documents`)的总计
在'articles'上左键连接'articles'。'document_id`='documents`.'id`
左键连接“documents”上的“documenttypes”。“documenttype\u id”=`documenttypes`.`id`
左键将'documents\u users'作为'documents'上的du连接。'id`=du。'document\u id`
将'documents\u usergroups'作为“documents”上的dug左连接。'id`=dug.'document\u id`
在'elements'上左连接元素。'article\u id`='articles`.'id`
其中`documents`.`trashed`=0
和“文档”。“已发布”=1
和'articles'。'status\u id`=1
和'articles'。'language_id`=1
和(`documents`.`no\u search`='0'
或“文档”。“无搜索”为空)
和((dug.usergroup_id为空)
和(du.user_id为空))
和(`documents`.`startdate`NOW()
或“文档”。“结束日期”=“0000-00-00:00:00”
或“documents”。“enddate”为空)
有(总数>0)
按标签ASC订购,
总描述限值0,10

您可以尝试使用语句
DISTINCT

SELECT DISTINCT 'documents'.*, 
'documenttypes'.'name' as 'doctype', 
'articles'.'id' as 'article_id',
... 

GROUP BY
允许您使用聚合函数,如
AVG
MAX
MIN
SUM
,和
COUNT
这显然是您不使用的。

您是否在使用之前添加了GROUP BY
文档
id
。您不需要
GROUP BY
DISTINCT
在这种情况下,您的问题是表之间的比率为1:N或N:N,我建议逐个检查,例如:
documents\u usergroups.*
在同一个查询中,找到为同一个
文档带来不同数据的列。id
I did@Suchit,但它似乎只输出了一个结果,即id 186,其他结果似乎消失了使用DISTINCT不会改变结果