我有一个来自Wordpress的表,wp_commentmeta,我试图让用户喜欢评论。看起来像这样
+---------+------------+-----------------------+---------------------+
| meta_id | comment_id | meta_key | meta_value |
+---------+------------+-----------------------+---------------------+
| 23 | 6 | like | 2 |
| 31 | 8 | like | 1 |
| 32 | 6 | like | 1 |
+---------+------------+-----------------------+---------------------+
我知道如何获得用户2喜欢的评论
SELECT * FROM `wp_commentmeta` WHERE meta_key="like" AND meta_value=2
但我想知道的是;是否可以构建一个select语句,以便我只获得用户2不喜欢的注释,以便输出如下所示?
+---------+------------+----------+------------+
| meta_id | comment_id | meta_key | meta_value |
+---------+------------+----------+------------+
| 31 | 8 | like | - |
+---------+------------+----------+------------+
答案 0 :(得分:1)
是。您可以使用聚合和having
子句:
select comment_id
from wp_commentmeta
where meta_key = 'like'
group by comment_id
having sum(meta_value = 2) = 0;
sum()
子句中的having
计算用户2
的喜欢数量。 = 0
表示没有。
注意:这只会选择喜欢但不喜欢的评论2.如果您还想要从不喜欢的评论,那么您需要以某种方式提供评论列表。您的问题没有足够的信息来解决这种变化。
答案 1 :(得分:1)
你可以用聚合来做到这一点,但最有可能的是它会更慢。这是一个NOT EXISTS
的例子 SELECT
*
FROM
wp_commentmeta c
WHERE
meta_key = "like"
AND NOT EXISTS ( SELECT
1
FROM
wp_commentmeta c1
WHERE
c1.metavalue = 2
AND c1.comment_id = c.comment_id
AND meta_key = "like" )