Выбор из двух таблиц и проверка из двух «списков друзей»

Справочная информация
— У меня всего 4 таблицы.

  • Сообщений — Сообщения от обычных пользователей
  • Групповые сообщения — Сообщения из групп
  • Список друзей — Магазины дружбы
  • Членство в группах — Магазины группового членства

Я пытаюсь достичь: на странице будут перечислены все сообщения от вас, ваших друзей и групп, к которым вы присоединились.

(Предыдущий запрос) — Сообщения & Групповые сообщения находились в одной таблице и определялись полем «тип»

SELECT
DISTINCT p.id,
p.type,
p.user1,
p.user2,
p.content,
p.timestamp,
p.comments
FROM posts p, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR
p.user1 = 'MY ID' OR
(p.user1 = g.group_id AND g.user = 'MY ID')
ORDER BY p.timestamp, DESC LIMIT 10

Ранее у меня были записи и group_posts в той же таблице. Но теперь я думаю, что они должны быть в двух разных таблицах.

(НОВЫЙ запрос) — где сообщения и групповые сообщения находятся в отдельных таблицах

SELECT
DISTINCT p.id,
p.type,
p.user1,
p.user2,
p.content,
p.timestamp,
p.comments,
gp.id,
gp.type,
gp.user1,
gp.user2,
gp.content,
gp.timestamp,
gp.comments
FROM posts p, group_posts gp, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR
p.user1 = 'MY ID' OR
(p.user1 = g.group_id AND g.user = 'MY ID')
ORDER BY p.timestamp, gp.timestamp DESC LIMIT 10

Результаты, которые я получаю, — это строка, заполненная одним и тем же сообщением из моих group_posts.

Кроме того, мои идентификаторы в обоих постах & group_posts не в последовательности, то есть сообщения могут иметь 100 сообщений, но group_posts может иметь только 30 сообщений.

Что случилось?

0

Решение

Попробуй это:

SELECT
p.id,
p.type,
p.user1,
p.user2,
p.content,
p.timestamp,
p.comments,
gp.id,
gp.type,
gp.user1,
gp.user2,
gp.content,
gp.timestamp,
gp.comments
FROM posts p, group_posts gp, friends f, group_memberships g
WHERE (p.user1 = f.user2 AND f.user1 = 'MY ID') OR
p.user1 = 'MY ID' OR
(p.user1 = g.group_id AND g.user = 'MY ID')

GROUP BY p.id
ORDER BY p.timestamp, gp.timestamp DESC LIMIT 10;

Переключение нот DISTINCT в GROUP BY группировать по каждому посту.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]