MySQL запрос соединения таблиц для создания ленты новостей

Я хочу получить строки из 3 таблиц - LikeTable, ClosetTable, FollowTable, чтобы отобразить действия всех пользователей, за которыми следит человек. Это для веб-сайта. ClosetTable - таблица для продуктов пользователя. LikeTable - это таблица для лайков продуктов и Followtable для следующих и подписчиков.

В настоящее время у меня есть

SELECT c.user, c.productName
FROM ClosetTable AS c
LEFT JOIN FollowTable AS f ON c.user = f.isFollowed
WHERE f.follows = 'tony'

Это возвращает строки человека, "Тони" следует вместе с именем продукта. Однако я хочу, чтобы строки из LikeTable и FollowTable были одинаковыми. Таким образом, вы можете предложить способ сделать только 1 запрос, чтобы получить строки из всех 3 таблиц?

2 ответа

Решение

Вы можете попробовать что-то похожее на это:

SELECT c.user, c.productName
FROM FollowTable AS f
INNER JOIN ClosetTable AS c ON c.user = f.isFollowed
INNER JOIN LikeTable AS l ON c.user = l.userliked
WHERE f.follows = 'tony'

Я делаю некоторые предположения для имени поля, так как вы не предоставили структуры ваших таблиц.

Кроме того, я предложил вам добавить FollowTable в предложение FROM, а затем присоединить его к ClosetTable, так как вы добавили f.follows = 'tony' в свое предложение WHERE.

В противном случае удалите предложение WHERE и поместите условие в INNER JOIN. Что-то вроде:

LEFT JOIN FollowTable AS f ON c.user = f.isFollowed AND f.follows = 'tony'

Больше СОЕДИНЕНИЙ:

SELECT c.user, c.productName
FROM ClosetTable AS c
LEFT JOIN FollowTable AS f ON c.user = f.isFollowed
JOIN LikeTable as l on c.user = l.liked
WHERE f.follows = 'tony'

или что-то типа того. Вы не ограничены одним JOIN.

Другие вопросы по тегам