2014-10-02 6 views
1

У меня есть эта странная проблема. По какой-то причине выбирается только определенная строка. У меня есть этот user_data стол: enter image description hereMySQL только выбирает определенную строку

и website_name стол enter image description here

По какой-то причине с помощью этой команды, используя идентификатор пользователя 13 это работает:

enter image description here

но используя идентификатор пользователя 27 это Бесполезный 't, но вы можете видеть, что я добавляю # 27 в email_id строке gumblar.cn.

enter image description here

Почему он не будет работать с идентификатором 27? Я пользуюсь этой командой:

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

Любая помощь и объяснение приветствуются. Заранее спасибо.

ответ

4

У вас есть совпадение, что идентификатор == email_id для 13, вам необходимо изменить

USING (id) 

в

ON (website_name.email_id = user_data.id) 

EDIT:

В вашей таблице, вы увидите строку:

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

Yo u посмотрите, как 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'; 
+0

Привет, используя вашу команду, выберете все данные в 'email_address' и' handset'. Мне нужна только определенная строка для работы, например, когда я использую id '27', я получу адрес электронной почты' 2k10 @ gmail.com'. Также, пожалуйста, простите мою глупость, что вы подразумеваете под «совпадением, что id == email_id за 13».Вы имеете в виду, что 'website_name' совпадение имеет идентификатор' 13'? – sg552

2

Вы присоединяющийся с идентификатором 18 и Безоперационных пользователей имеет идентификатор 18.

Вам нужно присоединиться к нему с заявлением о:

join user_data on user_data.id = website_name.email_id 
+0

Привет, используя вашу команду, выберете все данные в email_address и трубке, но я не могу получить конкретную строку, например, используя id '27', получит мне адрес электронной почты' 2k10 @ gmail.com' – sg552

+0

, это правильно! у вас есть поле email_id в вашей таблице пользователей? Если нет, то каким образом вы хотите идентифицировать пользователя, согласующегося с доменами электронной почты. Вам нужно добавить поле email_id в свою пользовательскую таблицу, и все должно работать нормально. Просто используйте «join user_data on user_data.email_id = website_name.email_id» или используя (email_id) – Dewstar

2

В обеих таблицах содержится поле id, но, очевидно, они идентифицируют разные вещи (электронные письма и веб-сайты, соответственно). Вот почему ваш JOIN не может использовать поле id для получения разумных результатов (то, что он работал для 13, является только случайным, и результат запроса не имеет смысла). Вы должны использовать

JOIN user_data ON website_name.email_id = user_data.id 

Другой подход должен был бы переименовать id поля email_id и website_id. Затем вы можете использовать JOIN user_data USING(email_id).

+0

Привет, используя вашу команду, выберете все данные в 'email_address' и' handset'. Мне нужна только определенная строка для работы, например, когда я использую id '27', я получу адрес электронной почты' 2k10 @ gmail.com'. Также, пожалуйста, простите мою глупость, что вы подразумеваете под «совпадением». Вы имеете в виду, что обе таблицы совпадают с идентификатором # 13? – sg552

+0

Ну, вам все равно нужно добавить предложение WHERE, как и раньше. Да, это то, что я подразумевал под «совпадением». – TheWolf

Смежные вопросы