2013-01-08 193 views
0

我其实还没有任何代码可以提供..但我可以给你我想要处理的数据。mySQL查询 - 在同一个查询中再次使用结果

我正在处理一组标签/关键字。关键词可以通过'related_id'列与相关。

所以我的表如下所示:

keyword_tbl: keyword_id | keyword | related_id

对于这个例子,让我们来想象表中填入以下条目

Entry 1: 
keyword_id : 1 
keyword: Marathons 
related_id: 0 

Entry 2: 
keyword_id : 2 
keyword: Boston 
related_id: 1 

正如你可以看到,此内容的波士顿,通过related_id与马拉松有关

我正在给予用户abi愿意搜寻。如果他们搜索一个单词,那很容易,而不是问题。但是,如果他们搜索“波士顿马拉松”,我现在在查询时遇到困难。

SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%"

该初始查询后,我想比较结果,这将是2个条目我上面详述。

我想只返回与其他相关的术语。在这种情况下,波士顿是“最低”的共同标准,因此,我想退还。

试想:马拉松 - >波士顿

这能在一个查询中做了什么?

谢谢!

+0

更多地解释,什么ü希望有结果 –

+0

@goodmood其结果将是该行的全部keyword_id 2(波士顿)。这可能是由于'keyword:Boston'的'related_id'与'keyword:Marathons'有关,而不是相反。 –

+0

如果你搜索马拉松,你想得到波士顿的结果吗? –

回答

1

我想这样的事情可能做的伎俩:

SELECT 
    a.* 
FROM keyword a 
JOIN keyword b 
ON (a.related_id = b.keyword_id) 
WHERE (a.keyword LIKE "%boston%" 
     OR a.keyword LIKE "%marathon%") 
AND (b.keyword LIKE "%boston%" 
     OR b.keyword LIKE "%marathon%") 
+0

这似乎是做我需要的。感谢您的解决方案!我认为这可以修改超过2个关键字? –

+0

它可能会开始变得混乱,但是,如果有更多的关键字,你会在'WHERE'子句中有更多'OR ... LIKE ...'表达式 –

+0

这可能会要求很多,但是你能够添加另一个使用3个关键字的例子?所以我知道如何在PHP中建立查询变量?我很新的SQL:X –

0

下面的查询将给出答案 马拉松 - >波士顿。 如果有没有它会显示为 冰淇淋的关系的关键词 - >

SELECT resultset1.keyword,'->',IF(resultset2.keyword IS NOT NULL,resultset2.keyword,'') 
FROM 
    (SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%") 
    as resultset1 
LEFT JOIN 
    (SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%") 
as resultset2 
on resultset1.keyword_id=resultset2.related_id; 
+0

谢谢,这很有趣,我将不得不玩这个。 –

相关问题