gpt4 book ai didi

mysql - 在 SQL 查询中排除喜欢和不喜欢的页面?

转载 作者:行者123 更新时间:2023-11-29 11:23:07 25 4
gpt4 key购买 nike

我通过这些表中的喜欢和不喜欢来保存兴趣:pagespages_likespages_dislikes

现在我想要一个主页来显示随机页面,但仅显示那些未被特定用户喜欢或不喜欢的页面。

到目前为止我有这个 SQL 语句:

SELECT
p.id AS page_id, d.uid AS duid, l.uid AS luid,p.title FROM OneNight_pages p

LEFT JOIN OneNight_pages_dislikes d on d.page_id = p.id
LEFT JOIN OneNight_pages_likes l on l.page_id = p.id
WHERE
l.uid != 1 AND d.uid != 1
GROUP BY page_id

ORDER BY rand() LIMIT 10

我首先在没有 AND d.uid != 1 的情况下对此进行了测试,并得到了正确的结果。但是添加这个 AND 条件后我得到了错误的结果。他只会选择一个被喜欢和不喜欢的页面,而不会像我想要的那样过滤掉这个特定的用户 ID。

如何才能只排除喜欢和不喜欢的特定用户 ID?我猜需要子查询或其他东西?

最佳答案

您没有提供表结构,也没有提供数据样本,也没有提供预期结果,所以说实话,您的问题不是很清楚。

这就是你想要的:

SELECT p.id AS page_id, p.title
FROM OneNight_pages p
LEFT JOIN OneNight_pages_dislikes d ON (d.page_id = p.id AND d.uid = 1)
LEFT JOIN OneNight_pages_likes l ON (l.page_id = p.id AND l.uid = 1)
WHERE l.uid IS NULL AND d.uid IS NULL
GROUP BY page_id
ORDER BY rand()
LIMIT 10

如果这确实是您想要的,并且一个用户只能喜欢或不喜欢每个页面一次(即,如果您的主键是 (page_id, uid)),那么 GROUP BY 可能是不必要的。

另外,作为旁注,除非您的用户可以同时喜欢和不喜欢某个页面,否则只有一个表 likes 会更有意义一个字段,指示它是喜欢还是不喜欢(例如,“1”表示喜欢,“-1”表示不喜欢)。

关于mysql - 在 SQL 查询中排除喜欢和不喜欢的页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38615796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com