gpt4 book ai didi

sql - 我应该如何处理 "forget this"功能背后的数据库逻辑?

转载 作者:行者123 更新时间:2023-11-29 11:46:09 26 4
gpt4 key购买 nike

那么,假设我有一个 users table 和一个 pages table 。假设我想允许用户隐藏/忘记/忽略某些页面。在这一点上,我可以想到两种可能的方法:

null 的外部连接匹配:

我可以创建一个单独的 ignored_pages带列的表格 user_idpage_id , 写给它 INSERT INTO ignored_pages (user_id, page_id) VALUES (1,2);当 ID 为 1 的用户忽略 ID 为 2 的页面时。

然后我可以运行类似 SELECT pages.* FROM pages LEFT OUTER JOIN ignored_pages ON pages.id = ignored_pages.page_id WHERE ignored_pages.user_id = 1 AND ignored_pages.id IS NULL; 的程序

编辑: Joe Stefanelli指出了我的查询中的一个错误。应该是SELECT pages.* FROM pages LEFT OUTER JOIN ignored_pages ON pages.id = ignored_pages.page_id AND ignored_pages.user_id = 1 WHERE ignored_pages.id IS NULL;

子查询和NOT IN :

我可以使用相同的多对多表,然后运行类似 SELECT pages.* FROM pages WHERE page_id NOT IN (SELECT page_id FROM ignored_pages WHERE user_id = 1); 的程序.


是否有最佳实践或一系列经验法则或(可能)比我正在采用的方法更好的方法来解决这个问题?

最佳答案

您的最佳表现实际上可能是NOT EXISTS

SELECT p.* 
FROM pages p
WHERE NOT EXISTS(SELECT 1
FROM ignored_pages
WHERE user_id = 1
AND page_id = p.id);

如果您决定坚持使用 LEFT JOIN 选项,则需要更正该查询以在连接条件而不是 WHERE 上测试 user_id 子句。

SELECT pages.* 
FROM pages
LEFT OUTER JOIN ignored_pages
ON pages.id = ignored_pages.page_id
AND ignored_pages.user_id = 1
WHERE ignored_pages.id IS NULL;

关于sql - 我应该如何处理 "forget this"功能背后的数据库逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6446430/

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