使用SQL Query发送通知

时间:2013-07-30 11:02:57

标签: mysql sql sql-server mysqli group-by

我有一个包含以下架构的表

UserId,notication_detail,notification_sent either 1 or 0 

对于不同的用户会有很多通知,例如userId=10的10个通知或userId=3的4个通知(表中有4个不同的行。对于特定的UserId可能没有通知。我是什么意思我想做的是单独为所有用户发送Unsent通知并邮寄它们。我不能在这里使用UserId组。 select * from table where UserId="" and notification_sent=0,这是1个用户的正常情况,但我需要检查该表的不同ID 任何可以帮助我的人

1 个答案:

答案 0 :(得分:0)

假设您的数据库有这两个表:User(UserID-PK,UserName,...)Notification(NotificationID-PK,UserID,notification_sent,...),那么您可以使用此查询为每个用户获取以下列:HasNotifications(1,0)和{ {1}}(1,0):

HasUnsentNotifications

但是,如果您需要一个列表,其中包含那些没有通知的用户以及那些拥有未发送通知的用户,那么您可以使用另一个查询:

SELECT u.UserID,u.UserName,
CASE WHEN EXISTS(    
    SLEECT *
    FROM Notification n 
    WHERE u.UserID=n.UserID ) THEN 1 ELSE 0 END HasNotifications,
CASE WHEN EXISTS(    
    SLEECT *
    FROM Notification n 
    WHERE u.UserID=n.UserID AND n.notification_sent=0) THEN 1 ELSE 0 END HasUnsentNotifications
FROM User n
WHERE n.UserID IN (3,10,...)

编辑1(SQL Server):

如果您不知道有多少用户需要运行查询,那么您可以使用表变量:

SELECT u.UserID,u.UserName,
    CASE WHEN n.NotificationID IS NOT NULL THEN 1 ELSE 0 END HasNotifications,
    n.NotificationID,n.notication_detail
FROM User u LEFT OUTER JOIN Notification n ON u.UserID=n.UserID 
WHERE (n.notification_sent=0 -- Has unsent notifications
OR n.NotificationID IS NULL)
WHERE n.UserID IN (3,10,...)    

DECLARE @SelectedUsers TABLE(UserID INT PRIMARY KEY);
INSERT @SelectedUsers (UserID) VALUES (3);
...
INSERT @SelectedUsers (UserID) VALUES (10);

SELECT ...
FROM User n
WHERE n.UserID IN (SELECT UserID FROM @SelectedUsers)