2015-04-17 37 views
1

我想列出來自倫敦的用戶,並且在我的表格中具有NORMAL或GOLD會員類型。如何使用Where Join哪裏?

users table 
==================== 
id name city_id user_type 
1 Helen 2  NA 
2 James 1  PREMIUM 
3 David 1  NORMAL 

cities table 
============= 
id name 
1 London 
2 New York 


$londonUsers = $db->get_rows(" 
    SELECT * FROM users 
    WHERE user_type = ('NORMAL','PREMIUM') 
    JOIN cities ON cities.id = users.city_id 
    WHERE name = 'London' 
"); 
+2

我建議你閱讀['SELECT'語句](http://dev.mysql.com/doc/refman/5.7/en/select.html)的語法。答案就在那裏。 – axiac

回答

1

你只能把WHERE子句後的FROM/JOIN聲明。如果您想要多個WHERE聲明,則可以將它們與ANDWHERE聲明中子句的結果應該是TRUEFALSE)結合使用,以便您可以使用ANDOR組合聲明。

這裏是你會怎麼做,在你的例子:

SELECT * 
FROM users 
JOIN cities ON cities.id = users.city_id  
WHERE user_type IN ('NORMAL','PREMIUM') 
    AND cities.name = 'London' 

這將首先給你的連接表是這樣的:

join table result 
==================== 
users.id users.name users.city_id users.user_type cities.id cities.name 
1   Helen  2    NA    2   New York 
2   James  1    PREMIUM   1   London 
3   David  1    NORMAL   1   London 

,然後篩選出只顯示那些滿足WHERE語句即user_type NORMAL或PREMIUM和倫敦城市。

+0

聽起來好多了。但它給了我「基數違規:1241操作數應該包含1列」錯誤。 –

+0

哪一個是正確的? user_type =('NORMAL','PREMIUM')或user_type IN('NORMAL','PREMIUM') –

+0

它應該是IN。對不起,我只是使用你的問題查詢,並專注於移動WHERE的東西。現在修復,以便它工作。 – while

4

SELECT,FROM,JOIN,WHERE,GROUP BY,HAVING,ORDER BY。

在合併多個條件時在where子句中或在連接上使用「AND」或「OR」,並且不能使用user_Type =兩件事。您必須使用IN(此列表)或創建單獨的條件。如

WHERE (user_type = 'NORMAL' or user_type = 'PREMIUM') and name = 'London'

SELECT * 
FROM users u 
JOIN cities c 
    ON c.id = u.city_id 
WHERE c.name = 'London' 
    and u.user_type in ('NORMAL','PREMIUM') 
+0

非常感謝! –

+0

這會因'ERROR 1052(23000):'where'子句中的'名稱'含糊不清'而在兩個表中存在名稱。 – while