2016-07-19 45 views
-2

我的表是這樣的:多個where子句中使用相同的列SQL

user_id field_id value 
1   1   toto 
2   1   tata 
2   2   tata Job 

user_id是我的用戶ID,field_id是信息有關用戶(name, job, etc.) id和值是值。

我在HTML/PHP中使用了一個搜索條,它有2個字段:'name'和'job'。 當有人使用這兩個字段搜索用戶時,我需要檢索符合這兩個條件的用戶標識。

我的問題是: 如何SQL有兩個條件匹配一個像這樣的所有user_id得到:

(field_id=1 and value=tata) AND (field_id=2 and value=tata's Job) 

謝謝你,有一個美好的一天!

+3

那麼首先你發現_How一本好書或教程編寫SQL_ – RiggsFolly

回答

1

SQL爲每行執行WHERE邏輯,而不是整個集合。字段不能有多個值。所以,你需要使用一個OR語句,而不是一個AND來捕捉兩個條件:

Select User_Id, Field_Id, Value 
From  YourTable 
Where (field_id = 1 And value = 'tata') 
Or  (field_id = 2 And value = 'tata Job') 
+0

他們搜索用戶磨片re field_1(例如姓名)是Tata,field_2(例如職業)是'builder'。你搜索任何名爲tata的用戶,無論是否有任何proffession和任何名稱的建設者 –

+0

@Aツ我沒有關注 - 你是什麼意思? – Siyual

1

一種方法是使用聚合:

select user_id 
from t 
where (field_id = 1 and value = 'tata') or (field_id = 2 and value = 'tata''s Job') 
group by user_id 
having count(distinct field_id) = 2; 
+0

戈登?? 'value ='tata's Job'' Woops – RiggsFolly

+0

這似乎過於複雜,因爲他們描述的查詢 – Siyual

+0

'where'應該是:'where(field_id = 1 and value ='tata')OR(field_id = 2 and value ='tata'的工作')' –

0

您可以使用IN語句,例如:你的表名是users

SELECT user_id 
FROM users 
WHERE field_id IN (1,2) AND `value` IN ('tata','tata\'s Job')