【发布时间】:2011-11-12 12:53:37
【问题描述】:
我有一个页面用我正在搜索的关键字标记了多个标签,有时它没有用那个关键字标记,所以当它有这些标签时,它会返回如下结果,
查询,
SELECT*
FROM root_pages AS p
LEFT JOIN root_mm_pages_tags AS mm
ON mm.page_id = p.page_id
LEFT JOIN root_tags AS t
ON t.tag_id = mm.tag_id
AND t.tag_name LIKE '%story%'
WHERE p.page_title LIKE '%article title 8%'
AND p.page_hide != '1'
ORDER BY (t.tag_name+0) ASC
结果,
page_id page_url tag_name
17 article title 8 NULL
17 article title 8 NULL
17 article title 8 sys-rsv-story-1
所以我必须使用GROUP BY来解决这个问题,
SELECT*
FROM root_pages AS p
LEFT JOIN root_mm_pages_tags AS mm
ON mm.page_id = p.page_id
LEFT JOIN root_tags AS t
ON t.tag_id = mm.tag_id
AND t.tag_name LIKE '%story%'
WHERE p.page_title LIKE '%article title 8%'
AND p.page_hide != '1'
GROUP BY p.page_id
ORDER BY (t.tag_name+0) ASC
它会返回类似的东西,
page_id page_url tag_name
17 article title 8 NULL
但是我在这个结果之后,它有我正在搜索的 关键字,
page_id page_url tag_name
17 article title 8 sys-rsv-story-1
那么,是否可以按关键字对结果进行分组?或者其他更好的查询来归档这个?
此外,如果该关键字不存在,它不应该返回结果,但它仍然存在,
page_id page_url tag_name
17 article title 8 NULL
17 article title 8 NULL
编辑:
我的新解决方案,
SELECT*
FROM root_pages AS p
INNER JOIN root_mm_pages_tags AS mm
ON mm.page_id = p.page_id
INNER JOIN root_tags AS t
ON t.tag_id = mm.tag_id
WHERE p.page_title LIKE '%{group1}%'
AND t.tag_name LIKE '%story%'
AND p.page_hide != '1'
AND EXISTS (
SELECT page_url
FROM root_pages AS p
LEFT JOIN root_mm_pages_tags AS mm
ON mm.page_id = p.page_id
LEFT JOIN root_tags AS t
ON t.tag_id = mm.tag_id
WHERE page_url = 'article title 1d'
AND t.tag_name LIKE '%story%'
AND p.page_hide != '1'
)
ORDER BY (t.tag_name+0) ASC
【问题讨论】:
标签: php mysql group-by tagging sql-like