0

我必须使用计数和组,我有点困惑。

我有 2 张桌子:

  • users

    id_user | 名字 | 姓氏 | 流派 | logo_src

  • user_stalking

    用户 ID | user_stalking_id

目前,我的查询如下所示:

SELECT   us.user_id, us.user_stalking_id, us.notification_viewed, u.id_user,
         u.firstname, u.lastname, u.logo_src, u.genre, us.id, us.date
FROM     users u, user_stalking us
WHERE    us.user_id = ".$_SESSION['user']['id_user']."
     AND us.notification_viewed = 0
     AND us.user_stalking_id = u.id_user
ORDER BY us.date DESC

它返回:

约翰 | 琼森 | 图片1.png | 男性

现在我想接收在user_stalking.user_idanduser_stalking.user_stalking_id字段中包含相同 ID 的所有行的计数。

4

4 回答 4

0

首先,我希望在此声明之前的某个地方你正在检查/清理 $_SEESION['user']['id_user'] 值,否则你会让自己对注入攻击敞开大门。

要回答您的问题,您可以通过像这样更改查询来检索这两个值(可能不是最有效的查询)。

SELECT  us.user_id, us.user_stalking_id, us.notification_viewed, u.id_user, u.firstname, u.lastname, u.logo_src, u.genre, us.id, us.date, 
    (SELECT COUNT(s.user_id) FROM user_stalking s WHERE s.user_id = u.user_id) AS stalking_count, 
    (SELECT COUNT(s2.user_id) FROM user_stalking s2 WHERE s2.user_stalking_id = u.user_id) AS being_stalked_count 
FROM    users u, user_stalking us 
WHERE   us.user_id = ".$_SESSION['user']['id_user']." 
    AND us.notification_viewed = 0 
    AND us.user_stalking_id = u.id_user ORDER BY us.date DESC
于 2012-10-02T13:16:57.023 回答
0

select count(*) AS count from users u, users_stalking us where u.user_id = us.user_stalking_id ??

(抱歉打错了,这是手机发的)

于 2012-10-02T13:21:18.267 回答
0
SELECT   COUNT(us.user_id)
FROM     users AS u
JOIN     user_stalking AS us ON (us.user_stalking_id = u.id_user)
WHERE    us.user_id = ".(int)$_SESSION['user']['id_user']."
          AND us.notification_viewed = 0
GROUP BY us.user_id
ORDER BY us.date DESC
于 2012-10-02T13:22:56.640 回答
0

“现在我想在 user_stalking.user_id 和 user_stalking.user_stalking_id 字段中接收包含相同 ID 的所有行的计数。”

我猜你正在寻找的是一个 equi join/inner join 查询。

    select count(*) from users u, user_stalking us where us.user_id = ".$_SESSION['user']['id_user']."
 AND u.id_user=us.user_stalking_id
于 2012-10-02T13:27:31.570 回答