我有兩個表比賽MySQL表記錄反之亦然
主詞
ID |文字
1 |機器
2 |電話替代詞
ID | primary_id | word
1 | 1 |系統
2 | 1 |功能
3 | 2 |電話產品表
ID |名稱|
1 |移動系統
2 |電腦機器
3 |有線電話
現在扭曲的是,每當在產品表與「機」的用戶搜索,然後顯示與表名產品的結果有「機」或「系統」或「功能」,如果用「系統」搜索或「特徵」,然後還顯示「機器」或「系統」或「特徵」或「副」的結果。
請問我可以怎麼解決這個問題?
我有兩個表比賽MySQL表記錄反之亦然
主詞
ID |文字
1 |機器
2 |電話
替代詞
ID | primary_id | word
1 | 1 |系統
2 | 1 |功能
3 | 2 |電話
產品表
ID |名稱|
1 |移動系統
2 |電腦機器
3 |有線電話
現在扭曲的是,每當在產品表與「機」的用戶搜索,然後顯示與表名產品的結果有「機」或「系統」或「功能」,如果用「系統」搜索或「特徵」,然後還顯示「機器」或「系統」或「特徵」或「副」的結果。
請問我可以怎麼解決這個問題?
如果我理解你正在問的是什麼......
SQL
SELECT *
FROM Product P
WHERE EXISTS(SELECT fw.Word --(6) select all products that exist in this query
FROM (SELECT pw.Word --(1) select all Primary words matching input
FROM PrimaryWords pw
WHERE pw.Word = 'machine'
UNION --(3) union the results from both selects
SELECT aw.Word --(2) select all Alternative words that match input or have its primary matching it
FROM PrimaryWords pw INNER JOIN AlternativeWords aw
ON pw.Id = aw.PrimaryId
WHERE pw.Word = 'machine'
OR aw.Word = 'machine') as fw --(4) alias the result
WHERE p.Name LIKE '%' || fw.Word || '%'); -- (5) filter products that match the valid words
就可以讀取編號訂購的評論中()。
我建議把它放在一個表是這樣的:
id | primary_id | word
1 | 1 | machine
2 | 2 | phone
3 | 1 | system
4 | 1 | feature
5 | 2 | telephone
和查詢會是這樣,讓我們machine
字爲例:
Select word from MyTable where primary_id in
(select primary_id from MyTable where word = "machine")
輸出:machine
, system
,feature
更新
如果您有更多的列,例如顯示多少相關的這些話,你可以添加更多的表來話之間進行映射,如下所示:
id | w1_id | w2_id | relation
1 | 1 | 3 | 80
2 | 2 | 5 | 90
3 | 1 | 4 | 60
4 | 3 | 4 | 60
而字表將只列出類的話語:
id| word
1 | machine
2 | phone
3 | system
4 | feature
5 | telephone
在this thread,你會發現一個長時間的討論,談論的方式,你必須在設計你的架構的佈局,以及如何提示[R檢索您的數據。
無論表看,謝謝你的建議。但我認爲你的查詢對我更有幫助,它只會返回機器記錄。 – Kamlesh
你可以隨心所欲地改變它;你可以用任何詞來替換'machine'。 –
@Kamlesh ..請檢查我的答案中的更新。 –
首先你需要把這兩個表數據inti一個,然後給出條件。
Select word from(
SELECT id,word FROM PrimaryWords
Union all
Select primaryid,word from AlternativeWords a
) where id in (select id from primarywords where word='yoursearchketword'
Union
Select primaryid from AlternativeWords where word='yoursearchketword')
更新答案按你的產品表。
現在您需要交叉加入產品表,因爲它們之間沒有任何關係。
還有一件事是你必須在這裏使用像運算符來比較你想要的結果與prouct表名字段。在這裏我已經給出了一個小想法如何做到這一點,但你可以很容易地改善。
Select a.word,b.name from
(Select word from(
SELECT id,word FROM PrimaryWords
Union all
Select primaryid,word from AlternativeWords a
) where id in (select id from primarywords where word='yoursearchketword'
Union
Select primaryid from AlternativeWords where word='yoursearchketword')) a, product b
Where a.word LIKE CONCAT('%',name, '%');
這將有助於顯示您正在使用的查詢。還有,要清楚的是:在任何系統中,用戶鍵入「machine」,執行搜索(上述db查詢運行),它返回3行「machine」,「system」,「feature」? – DesertFox
使用第一個表中的'id'和第二個表中的'primary_id'? – bansi
請向我們展示您嘗試過的內容,因爲這只是當前的代碼請求。 – Shadow