MYSQL选择行数语句时作为Case

MYSQL选择行数语句时作为Case,mysql,select,case-when,Mysql,Select,Case When,我试图找到每个用户的通知数量,我遇到了一个小问题,我的查询非常适合我所需要的,然后我稍微改变了一下我的表 工作查询: $numNotifications = mysql_num_rows(mysql_query(" SELECT N.*, P.* FROM notifications N, posts P WHERE N.userID='$session' AND

我试图找到每个用户的通知数量,我遇到了一个小问题,我的查询非常适合我所需要的,然后我稍微改变了一下我的表

工作查询:

$numNotifications = mysql_num_rows(mysql_query("
SELECT  
      N.*, 
      P.*
      FROM 
          notifications N, 
          posts P
      WHERE 
          N.userID='$session' 
      AND 
          (
          N.action='1' OR N.action='2'
          ) 
      AND 
           N.uniqueID=P.id AND  P.state='0'"
));
但是,uniqueID现在对于某些行是不同的。当N.aciton为“1”时,N.uniqueID应与P.id进行比较,但当N.action为“2”时,应将该表中的一行与P.id进行比较

示例查询(应该可以,但不能)

my 3表格结构图:

给你:)


您好:)您的意思是当action=1时,uniqueID指向帖子(P.id),当action=2时,uniqueID指向评论(C.id)?好吧,当action=1时,P.id和N.uniqueID是相同的。与action=2时相同。如果您遵循我的设置方式,C.id和N.unique是相同的?是的,我遵循:),但这不是您在这个问题中所写的内容。在代码示例之间,您需要编写两次P.id,而不是P.id/N.id。这就是我要求澄清的原因!我相信你用这个通知表让事情变得更困难了。它只保存多余的数据,我收回。。您跟踪两件事:1)是否已通知用户新的帖子/评论?2) 用户是否阅读了新的帖子/评论?这是正确的吗?老实说,我只是把自己搞糊涂了,我现在正试图弄清楚我到底想做什么lol。就数据而言,我正在建设的网站最有必要(其中一些将在未来使用)
$numNotifications = mysql_num_rows(mysql_query("
SELECT  
      N.*, 
      P.*, 
      C.*, 
     (CASE WHEN (
                  N.action = 2 AND N.state = 0
                 )
            THEN 
                 C.postID ELSE N.uniqueID END
      ) AS postId  
      FROM 
          notifications N, 
          posts P, 
          comments C 
      WHERE 
          N.userID='$session' 
      AND 
          (
          N.action='1' OR N.action='2'
          ) 
      AND 
           postId=P.id AND  P.state='0'"
));
SELECT
    COUNT(`notif_id`) AS `number_of_new_notifications`
FROM
    (
        SELECT
            `notifications`.`id` AS `notif_id`
        FROM
            `notifications`
        JOIN
            `posts`
        ON
            `notifications`.`uniqueID`=`posts`.`id`
        WHERE
            `notifications`.`userID`='$session'
        AND
            `notifications`.`action`=1
        AND
            `notifications`.`state`=0
        AND
            `posts`.`state`=0
        UNION ALL
        SELECT
            `notifications`.`id` AS `notif_id`
        FROM
            `notifications`
        JOIN
            `comments`
        ON
            `notifications`.`uniqueID`=`comments`.`id`
        JOIN
            `posts`
        ON
            `comments`.`postID`=`posts`.`id`
        WHERE
            `notifications`.`userID`='$session'
        AND
            `notifications`.`action`=2
        AND
            `notifications`.`state`=0
        AND
            `comments`.`state`=0
        AND
            `posts`.`state`=0
    ) AS notification_ids;