2013-05-03 4 views
0

Структура моих таблиц:Как объединить четыре запроса в один запрос?

posts (id, name, user_id, about, time)  
comments (id, post_id, user_id, text, time) 
users_votes (id, user, post_id, time) 
users_favs (id, user_id, post_id, time) 

Как я могу объединить эти четыре запроса (не с UNION):

SELECT `id`, `name`, `user_id`, `time` FROM `posts` WHERE `user_id` = 1 
SELECT `post_id`, `user_id`, `text`, `time` FROM `comments` WHERE `user_id` = 1 
SELECT `user`, `post_id`, `time` FROM `users_votes` WHERE `user` = 1 
SELECT `user_id`, `post_id`, `time` FROM `users_favs` WHERE `user_id` = 1 

Должен ли я использовать JOIN S?

Каким будет SQL-запрос для этого?

+1

Знаете ли вы, в чем разница между 'UNION' и' JOIN'? –

+1

Вы пробовали узнать о 'JOIN's? – Patashu

+0

Непонятно, что вы хотите? Вы хотите подсчитать комментарии по почте? пользователь по почте? Вы хотите получать комментарии с информацией о сообщении? быть более четкими. – medina

ответ

2

Вы не хотите объединяться вместе.

Тип JOIN, который вы использовали бы, чтобы получить это, закончит тем, что сделает кросс-продукт всех найденных строк. Это означает, что если у вас было 4 сообщения, 2 комментария, 3 голоса и 6 избранных, вы получили бы 4 * 2 * 3 * 6 строк в результатах вместо 4 + 2 + 3 + 6 при выполнении отдельных запросов.

Единственный раз, когда вы хотите, чтобы JOIN - это когда две вещи связаны друг с другом. То есть вы хотите получить сообщения, связанные с фаворитом, голосованием или комментарием.

Основываясь на вашем примере, в этих вещах нет такой общности.

+0

О, спасибо вам большое :) – Marcin

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