2013-01-08 190 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

謝謝,這很有趣,我將不得不玩這個。 –

相關問題