2012-03-01 171 views
1

的正確方式,我有如下所示MySQL的選擇

id field_id  field_value   user_id 
1  4   'london'    12 
2  4   'manchester'   33 
3  25   'accounting'   12 
4  25   'web designer'  37 
5  27   'food'    12 
6  27   'wine'    34 

我的問題,現在的表是我需要查詢它在人力方面的跟進,

我需要以某種方式對拆表選擇查詢,所以我可以尋找像這樣,

我需要搜索的所有用戶,其中有(「倫敦」)AND(「會計」或「網頁設計)AND(食物或酒)

我的問題是我不能將field_value拆分爲獨立的「位置」,「職位」,「興趣」,如果他們在不同的領域我會發現很容易做到,但是因爲他們在同一個領域,我發現很難使用AND和OR組合,

如果問題很難理解,我會嘗試進一步解釋。 多日Thnx

此外,如果有PHPmysql的解決方案:)

+0

您是否使用EAV模式,你想要查詢自定義字段?據我所知,你需要有一個用戶表和用戶自定義字段的表,對嗎?我不太瞭解你的數據結構 – Oleg 2012-03-01 10:33:14

+0

你正在尋找的類別(「位置「,」職位「)由」field_id「表示,對嗎?如果是這樣,你可以使用子查詢,只選擇這些類別並從那裏繼續。 – TPete 2012-03-01 10:33:54

+0

@tpete well,location is lon唐曼徹斯特,職稱網頁設計師會計,我不能做出不同的表格,因爲這是一個開源項目,並會創造更多的問題,解決他們這個小問題:) – Val 2012-03-01 10:36:34

回答

2

您所面臨的問題,因爲你的表是使用EAV (Entity–attribute–value model)(反)模式設計的組合,我不會介意。

一個更好的表格設計應該是有一個表'位置',一個表'職位'和一個表'興趣'。它也可以解決你的問題。

但是,你可以使用這種設計,但它更麻煩。

我需要搜索的所有用戶,其中有( 「倫敦」)AND( 「會計」 或「網頁設計)AND(食物或酒)

SELECT y1.* 
FROM yourtable y1 
JOIN yourtable y2 
ON y1.USER_ID = y2.USER_ID 
JOIN yourtable y3 
ON y2.USER_ID = y3.USER_ID 
WHERE y1.field_id = 4 
AND y1.field_value = "london" 
AND y2.field_id = 25 
AND y2.field_value IN ("accounting", "web design") 
AND y3.field_id = 27 
AND y3.field_value IN ("food", "wine") 
+0

你忘了'as'關鍵字? '... as y1'?或者是可選的? – Val 2012-03-01 10:34:35

+2

這是可選的,但如果您認爲它更清楚,隨時添加它。 – Konerak 2012-03-01 10:35:07

+1

你應該加入'user_id',否則,查詢不會返回任何東西 – newtover 2012-03-01 10:42:19

1
SELECT * 
    FROM table 
    WHERE user_id IN(SELECT user_id FROM table WHERE field_value LIKE '%london%') 
    AND user_id IN (SELECT user_id FROM table WHERE field_value LIKE '%accounting%' OR field_value LIKE '%web design%') 
    AND user_id IN (SELECT user_id FROM table WHERE field_value LIKE '%food%' OR field_value LIKE '%wine%')