【问题标题】:PHP complex MySQL query Counting from different tablePHP复杂的MySQL查询从不同的表计数
【发布时间】:2023-04-02 17:41:01
【问题描述】:

我正在开发一个网络/社交网站,我正在尝试创建一个函数来返回在您访问同一页面时访问同一页面的用户。

如何通过对“READING”表中的 user_id 进行计数和分组来从“USERS”表中选择用户?

数据库结构如下:

用户

  • user_id
  • 用户名
  • ...

阅读

  • 身份证
  • user_id
  • update_timestamp
  • ...

应该返回的是这样的数组

user
  - user_id
  - user_name
  - user_first_name
  - ...
user
  - user_id
  - ...

这是我目前的查询

SELECT r.user_id, u.* FROM reading r, users u GROUP BY r.user_id AS count WHERE u.user_id = r.user_id ORDER BY count DESC

示例表

用户

// user_id // user_name // user_email
-------------------------------------
    123    /   mentos   /  m@gmail.com
-------------------------------------
    321    / freshmaker / f@gmail.com
-------------------------------------
    231    /  hubba     /  h@gmail.com

阅读

//    id  //  user_id   //  timestamp
--------------------------------------
      1   /    123      /   201501050420
      2   /    321      /   201501050420

输出应该是什么示例

-ARRAY
  -user
     - 123
     - mentos
     - m@gmail.com
   -user
     - 321
     - freshmaker
     - f@gmail.com

【问题讨论】:

  • 几个问题:您提到“计数和分组”,但您的示例输出不包括任何类型的聚合,例如 COUNT()。你是什​​么意思?您如何确定“同时”标准?你有reading.update_timestamp——应该有一些阈值,比如update_timestamp在过去60秒内有一个值吗?
  • 忘记将它放在示例中,reading.update_timestamp 将每 5 分钟更新一次,例如,如果您在页面 A 而我在页面 A,我将不得不看到你和我在同一页上。我希望这能更好地解释它。
  • 请张贴两个表格中的一小部分行样本 - 足以说明一组用户同时阅读和一组不同时阅读。鉴于该数据,还请发布查询输出的表格。组/计数仍未得到很好的解释。

标签: php mysql


【解决方案1】:

你在寻找这样的东西吗?

SELECT u.*
  FROM 
(
  SELECT DISTINCT user_id
    FROM reading
   WHERE update_timestamp >= NOW() - INTERVAL 5 MINUTE -- or any other appropriate time interval
     AND user_id <> 4 -- depending on the logic you might want to exclude the current user itself
) q JOIN users u
    ON q.user_id = u.user_id

这是一个SQLFiddle演示

【讨论】:

    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多