gpt4 book ai didi

php - 连接 3 个表并匹配空条目

转载 作者:行者123 更新时间:2023-11-29 15:35:00 24 4
gpt4 key购买 nike

我有 3 个表,用户、新闻、news_viewed。我正在尝试连接这 3 个表并查找每个用户未查看过的新闻列表。

  • 用户
    • 用户ID
    • 用户名
    • 状态
  • 表格新闻
    • 新闻ID
    • 标题
    • post_time
  • news_viewed
    • nvid
    • 用户名
    • 新闻ID

寻找未读过新闻的用户列表(在news_viewed中找到)

我尝试了许多不同的连接,包括左连接、内部连接和外部连接,但无法获得我需要的结果。

$_30daysago = strtotime('-30 days');
SELECT * FROM
(
SELECT users.username, news_id
FROM users inner join news_viewed ON
users.username = news_viewed.username and users.status='active'
UNION
SELECT news_viewed.username, post_time
FROM news_viewed inner join news ON
news_viewed.newsid = news.newsid and news.post_time>'$_30daysago'
) as JoinedTable

我需要所需的结果来包含 users.username、news.newsid 和 news.title。

如有任何帮助,我们将不胜感激,谢谢!

最佳答案

这是使用LEFT JOIN反模式的好地方:

SELECT u.username, n.newsid, n.title
FROM users u
INNER JOIN news n ON n.post_time > ?
LEFT JOIN news_viewed nv
ON n.newsid = nv.newsid
AND nv.username = u.username
WHERE
u.status = 'active'
AND nv.nvid IS NULL

此查询生成用户和最近新闻的笛卡尔积(即发布时间大于指示的参数),并返回news_viewed上左连接的用户/新闻元组没有成功(因此是反模式)。

注意:不清楚在连接中使用什么列;列名 news_viewed (username) 倾向于表明它与 users(username) 相关,而 users 的主键似乎是 用户ID。修复您的列名称或修复您的关系。

关于php - 连接 3 个表并匹配空条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58332385/

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