Получить данные из 2 таблиц в MySQL (нужна помощь) - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть две таблицы ..

1-й стол: сообщение

|post_id  |    post_data |
..........................
|   1     |    any data  |
|   2     |    any data  |
|   3     |    any data  |

2-я таблица: post_likes

|like_id  |    post_id   | by_user |
....................................
|   1     |      1       |   3     |
|   2     |      3       |   3     |

когда пользователь, как и любые другие данные, хранится в таблице posts_likes. я хочу показать те посты (из обеих таблиц по одному разу), которые не понравились пользователю 3 ..

Я использую этот запрос

SELECT *
FROM post, post_likes
WHERE post.post_id != post_likes.post_id
AND by_user=3

это показывает мне эти результаты ..

post_id     post_data   like_id     post_id     by_user
  1         my data       2            3          3
  2         my data       1            1          3
  2         my data       2            3          3
  3         my data       1            1          3

Но он должен показывать только результат post_id = 2 (потому что post_id 1 и 3 нравятся пользователю)

какой будет правильный запрос, по которому я могу получить те посты, которые не нравятся пользователю 3

Ответы [ 4 ]

2 голосов
/ 13 февраля 2012
select *
from posts
where post_id not in
(
    select post_id
    from post_likes
    where by_user = 3
)
0 голосов
/ 13 февраля 2012
SELECT *
FROM post p
WHERE NOT EXISTS (SELECT * 
                  FROM post_likes 
                  WHERE p.post_id = post_likes.post_id 
                    AND user_id = 3
                 )
0 голосов
/ 13 февраля 2012
SELECT *
    FROM post p
        LEFT JOIN post_likes pl
            ON p.post_id = pl.post_id
    WHERE NOT EXISTS (SELECT 1
                          FROM post_likes pl2
                          WHERE pl2.post_id = p.post_id
                              AND pl2.user_id = 3);
0 голосов
/ 13 февраля 2012

Вы можете использовать подзапрос NOT IN () в своем предложении WHERE:

SELECT
  posts.post_id,
  posts.post_data,
  post_likes.like_id,
  post_likes.by_user
FROM posts LEFT JOIN post_likes ON posts.post_id = post_likes.post_id
WHERE posts.post_id NOT IN (
  SELECT DISTINCT post_id FROM post_likes WHERE by_user = 3
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...