MYSQL один ко многим ПРИСОЕДИНЯЙТЕСЬ - PullRequest
0 голосов
/ 12 апреля 2009

У меня есть этот запрос, и мне нужно включить еще одно объединение в таблицу с именем "likes", где updates.id = likes.update_id. В этом соединении будет 0 или более совпадений.

"SELECT * FROM users 
INNER JOIN updates ON users.remote_id=updates.owner_id 
ORDER BY updates.status_time DESC LIMIT 50"

Возможно, это довольно просто, но я не смог найти ни одного примера для такого запроса.

Ситуация в основном такова, что я отображаю список предметов. Я делаю соединение в таблице пользователей, чтобы получить пользователя, создавшего каждый элемент. Мне также нужно объединить таблицы «лайки», чтобы показать 0+ людей, которым понравился каждый элемент.


РЕДАКТИРОВАТЬ: Мое решение

Хорошо, вот успешное объединение и объединение повторяющихся результатов (из-за того, что для каждого обновления есть несколько «лайков») с использованием GROUP_CONCAT.

"SELECT   users.*,updates.update_id,updates.content,updates.status_time,
GROUP_CONCAT(likes.liker SEPARATOR ',') AS liked_by 
FROM updates 
LEFT OUTER JOIN likes ON updates.update_id = likes.update_id 
JOIN users ON users.remote_id = updates.owner_id 
GROUP BY updates.update_id 
ORDER BY updates.status_time DESC 
LIMIT 200"

Ответы [ 2 ]

2 голосов
/ 12 апреля 2009
SELECT * FROM users 
LEFT OUTER JOIN updates ON users.remote_id=updates.owner_id
INNER JOIN likes ON <join condition here>
ORDER BY updates.time DESC LIMIT 50

Будет ли это работать?

Если нет, можете ли вы уточнить, в чем именно заключается ваш вопрос? У вас не работает запрос?

1 голос
/ 12 апреля 2009

если у вас отношение 1 к n, вы должны использовать LEFT JOIN, я имею в виду, если есть только 1 пользователь и много лайков.user_id, вы должны сделать это следующим образом

«ВЫБРАТЬ * ОТ ПОЛЬЗОВАТЕЛЕЙ ЛЕВЫЙ ВКЛЮЧЕНО обновления (users.remote_id = updates.owner_id) ORDER BY updates.time DESC LIMIT 50"

таким образом вы получите все обновления от определенного пользователя:)

ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...