MySQL:在同一个表中获取与当前记录相关的记录

时间:2017-07-19 21:03:24

标签: mysql

我试图创建一个MySQL查询,它可以提取与搜索词匹配的所有项目。搜索字词可以匹配idtitle - 我已经覆盖了这一点。

我还希望它能够返回匹配项目可能具有的任何子项。所以目前我正在使用以下查询:(搜索词:"父项")

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

2 个答案:

答案 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

非常棘手...感谢您的回答和建议!