我知道这个问题对我所问的毫无意义,但我的意思是……为了更清楚地说明这一点,我将举例说明我的问题:
我有一个userpost表,其中包含来自不同用户的帖子。
userpost表:

 +---------+--------+--------------+
 |  postId | userId | postMessage  |
 +---------+--------+--------------+
 |       1 |      3 | someText     |
 |       2 |      5 | someText     |
 |       3 |      2 | sometext     |
 |       5 |      6 | someText     |
 +---------+--------+--------------+

(!记住userId被引用到users表)
我还有一个名为favorites的表,其中postId是从userpost表引用的:
收藏夹表:
+---------+--------+
|  postId | userId |
+---------+--------+
|       1 |      5 |
|       3 |      2 |
+---------+--------+

我想要的是从userpost中获取所有数据并检查(WHERE userId = 5是否支持某个用户帖子
我试过使用这个查询,但那不是我想要的!
    SELECT *,
    (SELECT EXISTS( SELECT * FROM `favorites` INNER JOIN `userpost` on
    favourites.postId = userpost.postId WHERE favorites.postId = 1
    AND   favorites.userId = 5)) AS isFavourited FROM userpost;

这是以下查询的结果:
+---------+--------+-------------+--------------+
|  postId | userId | postMessage | isFavourited |
+---------+--------+-------------+--------------+
|       1 |      3 | someText    |            1 |
|       2 |      5 | someText    |            1 |
|       3 |      2 | someText    |            1 |
|       5 |      3 | someText    |            1 |
+---------+--------+-------------+--------------+

我知道我在查询中犯了一个错误,使用:
(WHERE favorites.postId = 1 AND favorites.userId = 5)
这是真的。
我给你举一个我想要的例子:
假设(userId = 5)想要获取所有的userpost,我们必须得到以下结果:
+---------+--------+-------------+--------------+
|  postId | userId | postMessage | isFavourited |
+---------+--------+-------------+--------------+
|       1 |      3 | someText    |            1 |
|       2 |      5 | someText    |            0 |
|       3 |      2 | someText    |            0 |
|       5 |      3 | someText    |            0 |
+---------+--------+-------------+--------------+

最佳答案

尝试:

SELECT *,
    postId IN
        (SELECT postId FROM favourites WHERE userId = 5)
    AS isFavourited
FROM userPost

查询将检查是否存在一行,其中用户5最喜爱的文章位于1;而不是用户5最喜爱的文章位于返回的该行中。

08-26 23:41