我正在尝试进行一个MySQL查询,该查询可以提取与搜索词匹配的所有项目。搜索字词可以匹配id
或title
-这已经涵盖了。
我还希望它返回匹配项可能包含的所有子项。因此,目前我正在使用以下查询:(搜索字词:“父项”)
SELECT * FROM `table` WHERE (`id` LIKE "%parent item%" OR `title` LIKE "%parent item%")
哪个返回:
id | title | parent_id
------ | ----------- | ---------
15 | parent item | 0
但是我现在陷入了试图找出如何返回这样的事情的麻烦:
id | title | parent_id
------ | ----------- | ---------
15 | parent item | 0
34 | child item | 15
45 | child item | 15
58 | child item | 15
我正在使用PDO连接到数据库,所以据我所知,将其保持在一行是必要的。
有任何想法吗?
编辑:
经过反复尝试后找到了解决方案。.我在下面添加了答案,但这就是我的最终结果:
SELECT
t2.id AS id,
t2.title AS title,
t2.parent_id AS parent_id,
t1.title AS parent
FROM
`mc_sets` AS t1
RIGHT JOIN `mc_sets` AS t2
ON
t1.`id` = t2.`parent_id`
WHERE
t2.id LIKE "%parent item%" OR t1.title LIKE "%parent item%" OR t2.title LIKE "%parent item%"
输出:
id | title | parent_id | parent
------ | ----------- | --------- | ----------
15 | parent item | 0 | null
34 | child item | 15 | parent item
45 | child item | 15 | parent item
58 | child item | 15 | parent item
如果您对如何改进它有任何想法,或者有不同的解决方案,请随时分享:D
最佳答案
如果您只是想将表连接在一起,则可以尝试这样的操作。
SELECT p.Id, p.title, c.Id, c.title
FROM Parent p, Children c
where p.Id LIKE "%parent item%" and
p.title LIKE "%parent item%" and
p.Id = c.ParentId