【发布时间】:2021-04-23 06:05:32
【问题描述】:
我执行 SELECT 来决定是否向用户发送通知。 (10.3.23-MariaDB)
第一部分检查是否有 0 个未读通知,如果为 0,则不需要进一步 SELECT。
如果没有,我会计算用户自上次相等通知以来收到的通知数量(在这种情况下,总是有一个可以计算),并与未读通知数量进行对比user_sess.unread_noti
SELECT 'yes' AS do_insert
FROM
(SELECT unread_noti
FROM user_sess
WHERE user_id = 100)user_sess
WHERE user_sess.unread_noti = 0
OR (SELECT COUNT(*) FROM notification
WHERE user_id=100 AND id > 400
) >= user_sess.unread_noti
现在我想检查多个用户是否有相同的通知,并通过对多个用户执行 SELECT 来提高效率,例如像这样(不正确的示例):
SELECT user_sess.user_id
FROM user_sess
LEFT JOIN notification ON user_sess.unread_noti > 0
AND notification.id > 400
AND notification.user_id=user_sess.user_id
WHERE user_sess.user_id IN (100,101)
AND ( user_sess.unread_noti = 0
OR COUNT(notification.id) >= user_sess.unread_noti
)
notification.id 对于多个用户来说可以是相同的,因为我是批量插入他们,所以他们会占据同一个“位置”。
notification:
id Primary int(11)
user_id Index int(11)
user_sess:
user_id Primary int(11)
unread_noti tinyint(3)
【问题讨论】:
-
天哪 :-( 请停下来,转而查看meta.stackoverflow.com/questions/333952/…
标签: mysql sql mariadb mariadb-10.3