MySQL只选择某一行

时间:2014-10-02 23:07:08

标签: php mysql select join mysqli

我有这个奇怪的问题。由于某种原因,仅选择某一行。我有这个user_data表: enter image description here

website_nameenter image description here

出于某种原因,使用用户ID为13的此命令可以正常工作:

enter image description here

但使用用户ID 27却没有,但你可以看到我在email_id行gumblar.cn中添加#27。

enter image description here

为什么它不适用于id 27?我正在使用这个命令:

SELECT `email_address`, `handset` FROM `website_name` JOIN `user_data` USING ( id ) WHERE `email_id` ='27'

感谢任何帮助和解释。提前谢谢。

3 个答案:

答案 0 :(得分:4)

你有一个巧合,即id == email_id为13,你需要改变

USING ( id )

ON (website_name.email_id = user_data.id)

编辑:

在表格中,您会看到行:

id | website   |email_id
---+-----------+--------  
13 | yahoo.com | 13

您是否看到id与email_id相同?这只是一个巧合,也就是为什么它适用于那个号码(你加入了id,这恰好与email_id匹配,这就是你应该加入的)。

您的SQL应如下所示:

 SELECT `email_address`, `handset` 
 FROM `website_name` 
     JOIN `user_data` ON (website_name.email_id = user_data.id) 
 WHERE `email_id` ='27';

答案 1 :(得分:2)

您正在加入ID 18,而非您的用户的ID为18。

您需要使用on语句加入:

join user_data on user_data.id = website_name.email_id

答案 2 :(得分:2)

您的两个表都包含一个字段id - 但很明显,它们分别标识了不同的内容(电子邮件和网站)。这就是为什么您的JOIN无法使用id字段来产生合理的结果(它适用于13只是巧合而且查询结果没有意义)的原因。你需要使用

JOIN user_data ON website_name.email_id = user_data.id

另一种方法是将id字段重命名为email_idwebsite_id。然后,您可以使用JOIN user_data USING(email_id)