注意:我是 MySQL 的新手,所以请多多包涵。
我的数据库中有 2 个表,它们的设置如下:
guides table:
guide_id (primary) | cat_id | title
1 0 guide01
2 0 guide02
steps table:
step_id | guide_id (foreign) | step_txt
1 1 step1 text...
2 1 step2 text...
我正在尝试在数据库中搜索 steps.step_txt 中的关键字并返回指南列表。我当前的查询如下所示:
SELECT DISTINCT *
FROM guides
JOIN steps ON guides.guide_id=steps.guide_id
WHERE step_txt LIKE "%keyword%"
我发现,由于某些指南中包含关键字的步骤不止一个,因此会返回重复的行。我希望查询输出包含 guide_id、cat_id 和标题的 1 行,即使找到 2 行也是如此。
我认为问题在于我使用了 JOIN,因此查询实际上从两个表返回一个连接行,这两个表具有不同的 step_id 和 step_txt,因此 DISTINCT 不会影响它。最好的解决方法是什么?
最佳答案
粗略的解决方案是:-
SELECT DISTINCT guides.*
FROM guides
JOIN steps ON guides.guide_id=steps.guide_id
WHERE step_txt LIKE "%keyword%"
可能更优雅并为您提供匹配的文本:-
SELECT g.guide_id, g.cat_id, g.title, GROUP_CONCAT(s.step_txt)
FROM guides g
INNER JOIN steps s
ON g.guide_id = s.guide_id
WHERE step_txt LIKE "%keyword%"
GROUP BY g.guide_id, g.cat_id, g.title
关于MySQL DISTINCT 函数没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910298/