Php SQL搜索结果,按ID编号分组
我在尝试修复此SQL查询时遇到一些问题 这是一个自定义搜索查询,在CMS系统的所有页面上搜索“婚礼”一词 目前,我看到同一页出现在前5行,因为“婚礼”一词出现了5次。我想做的是将具有相同ID号的行组合成一行,这样它就不会出现多次 我原以为在这条语句的末尾使用GROUPBY可以做到这一点,但我一直得到一个SQL语法错误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`.*,
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不会改变结果