2015-04-17 48 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