2010-11-29 147 views
1

精確匹配這裏的表結構如何搜索在MySQL數據庫的多個表使用PHP

table : user 
id 
name 
email 
category 

table 2 : body 
id 
uid 
height 
haircolor 

以下是我從數據庫 SELECT * FROM user WHERE category='paid',並與它的工作更加規範訪問數據。

我想要做的就是這樣的(i..e允許複雜的搜索)

Select * FROM user WHERE category='paid' body.height='5ft', body.haircolor='red' WHERE user.id=body.uid 

我知道的說法是錯誤的,但我希望數據庫可被搜索到,這樣我可以選擇染髮作爲紅色,高度爲5英尺,腳本只能返回高度爲5英尺,頭髮顏色爲紅色的用戶(完全匹配)

我希望你們能理解我的問題。

P.S:正如你所看到的,我已經使用了2個表格,1個存儲用戶信息,2個存儲用戶身體信息。我可以將它們整合到1中,但我想保持原樣。

回答

1

實際上,您可以做一些與上面的操作非常相似的事情 - 您只需在FROM構造中使用多個表。當你想快速抽出某些東西時,這是一個很好的方法。

SELECT user.* FROM user, body 
    WHERE user.category = 'paid' 
    AND body.height = '5ft' 
    AND body.haircolor = 'red' 
    AND user.id = body.uid 

請記住要指定在這種情況下的選擇 - 一切從用戶。你也可以用JOIN來做到這一點,雖然我有一個恐懼症,所以傾向於使用以前的方法。

SELECT * FROM user 
    WHERE user.category = 'paid' 
    AND body.height = '5ft' 
    AND body.haircolor = 'red' 
    JOIN body ON user.id = body.uid 

這應該做的伎倆!正如我所說的,我鄙視使用JOIN,前者應該是絕對好的。

+0

這兩個查詢之間的區別究竟是什麼? – 2010-11-29 20:26:31

2

看起來你已經有點混亂的基於使用WHERE同時爲條件選擇的,以及指定的兩個表之間的連接。這就是爲什麼我寧願保持聯接明確定義,這會給你這樣的查詢:

SELECT user.* 
FROM user 
JOIN body ON body.uid = user.id 
WHERE body.height = '5ft' 
    AND body.haircolor = 'red'; 

所以,現在你已經分開這兩個表進行連接到JOIN/ON節的一部分,並且WHERE只包括縮小搜索範圍的條件。