gpt4 book ai didi

php - MySQL 结合复杂查询和优化功能

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

我正在处理一个相当复杂的通知系统,它在大多数情况下非常简单,复杂性在于检查其他表是否已删除内容,并且我有多个数据表所有都进入通知系统,所以它必须检查每一个,而且我必须能够在构建网站时轻松添加更多表以允许添加其他通知类型,并且使用当前查询我我正在使用它不允许这样做,我试图想出一个更好的方法来做到这一点,但是我对 mysql 查询不够好,所以我希望我能得到一些(或者结果可能是得到你们中的一个(或一些)的大量帮助。

这是我当前的查询:

SELECT
n.*,
MIN(n.state) state,
MIN(n.status) status,
MAX(n.date) maxDate
FROM notifications n
LEFT JOIN comments c
ON n.type = 'comment'
AND n.uniqueID = c.id
AND c.state='0'
LEFT JOIN posts p
ON n.type = 'post'
AND p.id = n.uniqueID OR n.type = 'comment'
AND p.id = c.postID

WHERE n.toID = '$session'
AND p.state = 0
GROUP BY n.uniqueID
ORDER BY status ASC, maxDate DESC

那么上面这句话的作用,简而言之就是这样。它从通知表中选择通知,在此表中有一列 typeuniqueID该内容。所以每一行的类型是 posts它检查 uniqueID 所在的 post 表from notifications 与 posts 表中的唯一 id 相同,然后它检查 state查看该帖子是否已被删除(如果未被删除,state=0,否则我不想要它)。评论也是如此。

所以我需要一种方法来完成所有事情,就像这样,但是我需要它更容易不断地向它添加新的表检查。我一直在尝试为一个名为 likes 的表添加另一个左连接,但是无论出于何种原因,我都无法让它一起工作。但是,我想出了这段代码,它可以做我想做的事。 (尽管仅适用于 likes 表,它不包括我需要的任何其他表)

SELECT
n.*,
MIN(n.state) state,
MIN(n.status) status,
MAX(n.date) maxDate
FROM notifications n
LEFT JOIN likes l
ON n.type = 'likes'
AND n.uniqueID = l.id
WHERE n.toID = '$session'
AND l.state='0'
GROUP BY n.uniqueID
ORDER BY status ASC, maxDate DESC

我希望有人能帮我解决这个问题,非常感谢!

最佳答案

看起来你可以使用“ANY”子查询 http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html

SELECT
n.*,
MIN(n.state) state,
MIN(n.status) status,
MAX(n.date) maxDate
FROM notifications n
WHERE n.toID = '$session' AND
(
(
n.type = 'likes' AND
n.uniqueID = ANY (
SELECT likes.id
FROM likes INNER JOIN posts on (likes.postId=posts.id)
WHERE likes.state='0' and posts.state='0'
)
) OR
(
n.type = 'comment' AND
n.uniqueID = ANY (
SELECT comments.id
FROM comments INNER JOIN posts on (comments.postId=posts.id)
WHERE comments.state='0' and posts.state='0'
)
) OR
(
n.type = 'post' AND
n.uniqueID = ANY (SELECT id FROM posts WHERE state='0')
)
)
GROUP BY n.uniqueID
ORDER BY status ASC, maxDate DESC;

关于php - MySQL 结合复杂查询和优化功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128863/

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