【问题标题】:Get data from 2 tables in mysql (Need Help)从 mysql 中的 2 个表中获取数据(需要帮助)
【发布时间】:2012-03-05 05:01:15
【问题描述】:

我有两张桌子..

第一个表:发布

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

第二张表: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 不喜欢的那些帖子

【问题讨论】:

标签: php mysql sql phpmyadmin


【解决方案1】:
select *
from posts
where post_id not in
(
    select post_id
    from post_likes
    where by_user = 3
)

【讨论】:

    【解决方案2】:

    您可以在 WHERE 子句中使用 NOT IN ()subquery:

    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
    )
    

    【讨论】:

    • 您是否缺少别名?或者,你的意思是表post_likes而不是likes
    【解决方案3】:
    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);
    

    【讨论】:

      【解决方案4】:
      SELECT *
      FROM post p
      WHERE NOT EXISTS (SELECT * 
                        FROM post_likes 
                        WHERE p.post_id = post_likes.post_id 
                          AND user_id = 3
                       )
      

      【讨论】:

        猜你喜欢
        • 2013-09-14
        • 1970-01-01
        • 2016-09-13
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 2019-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多