我试图创建一个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
答案 0 :(得分:0)
如果您只是想一起加入这些表格,可以尝试这样的事情。
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
答案 1 :(得分:0)
我经过一些试验和错误后想出来了。
我发现你可以给表别名,所以我能够在一个项目有父项的情况下加入表格,从而允许我将搜索词与父项的标题相匹配。
这有效:
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
非常棘手...感谢您的回答和建议!