Мой запрос MySQL JOIN получает данные только из одной таблицы - PullRequest
1 голос
/ 31 июля 2011
SELECT `users`.*
FROM (`users`)
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 

Это мой запрос.У меня есть данные в users, users_profiles, albums и users_sites.В настоящее время я получаю необходимые данные в четырех отдельных запросах, но я хочу оптимизировать их с JOIN s.

Моя проблема в том, что возвращаемый набор результатов содержит только одну строку данных из таблицы users (где id равно 4).Этого и следовало ожидать, но я хочу, чтобы и другие таблицы JOIN редактировались в конце.

Например, users_profiles содержит строку, которая, как я подтвердил, содержит user_id, установленную в 4. Но строк изusers_profiles когда-либо добавляется к запросу, все, что я вижу, это то, что приходит от users.

Есть идеи?То же самое относится и к другим таблицам - я подтвердил, что они должны быть выбраны правильно, но я не уверен, что я делаю неправильно.

Спасибо за вашу помощь!

Ответы [ 3 ]

2 голосов
/ 31 июля 2011
SELECT `users`.*, `user_profiles`.*, `albums`.*, `user_sites`.*
FROM (`users`)
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 
2 голосов
/ 31 июля 2011

Попробуйте:

SELECT `users`.*, `users_profiles`.*, `albums`.*, `users_sites`.*
FROM (`users`)
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 

Ваш код выбирает только столбцы из таблицы пользователей.

В качестве альтернативы

SELECT *
FROM (`users`)
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 

Обратите внимание, что выбор * не рекомендуется, поскольку он не оптимизирован.Просто выберите нужный вам столбец.

1 голос
/ 31 июля 2011

Вы выбираете только столбцы из таблицы пользователей;

SELECT <code>users. *

Измените свой оператор SELECT, включив в него столбцы, которые вы хотите получить, чтобы включить все столбцы из всех таблиц (зависит от вашего запроса);

SELECT * FROM `users`
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 

Чтобы включить все из users_profile и пользователей таблиц;

SELECT `users`.*, `users_profiles`.* FROM `users`
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 
...