2017-07-19 80 views
0

我正在尝试创建一个可以提取所有与搜索项匹配的项目的MySQL查询。搜索词可以匹配idtitle - 我已经介绍过了。MySQL:在同一表中取回与当前记录相关的记录

我也想要它返回匹配项可能有的任何孩子。因此,在现阶段,我现在用的是下面的查询:(检索词:“父项”),返回

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

你说的搜索词可以匹配的ID或标题但在你想要的结果搜索词是匹配什么?除了第一个标题 - 父项 – user3712320

+0

搜索项是与最高结果(id = 15)相匹配的“父项”,然后我想也将所有匹配的id(15)作为父ID 。 –

+0

我用我找到的解决方案更新了我的问题 –

回答

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 

是相当棘手的一个...感谢您的答案和建议!

+1

This one better so im删除我的答案,使线程清晰 – user3712320

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 
+0

它全部存储在同一个表中,所以很遗憾,它不是那么简单... –

+0

你怎么知道哪个是父母,哪个是孩子? – WiseGuy

+0

每条记录​​都有它自己的ID,并且所有记录都可以是另一条记录的子项,在这种情况下,它们有一个PARENT_ID,它是父记录的ID ......如果这样做有道理的话。 –