【问题标题】:unique field from mysql database to php从mysql数据库到php的唯一字段
【发布时间】:2010-09-16 19:24:46
【问题描述】:

我有一个这样的示例数据库,其中 id 始终是唯一的,但 user_id 不是唯一的。

id,user_id,message,msg_datetime
111,u1,来自 u1 的消息,这里的时间
112,u2, 来自 u2 的消息,这里的时间
113,u3,来自 u3 的消息,这里有时间
114,u2,来自 u2 的消息,这里的时间
115,u7,来自 u7 的消息,这里有时间
116,u2,来自 u2 的消息,这里的时间
117,u1,来自 u1 的消息,这里的时间
118,u5, 来自 u5 的消息,这里的时间

所以我只想抓住那些通过 msg_datetime 在 DESC 中发送消息的唯一用户。

这是我的查询。
select id,DISTINCT user_id,msg_datetime ORDER BY msg_datetime DESC 但我收到错误消息:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT。这里有什么帮助吗?我想要实现的正确语法是什么?

我只想为每个用户显示一个条目,我显示哪个 ID 无关紧要,但每个用户只显示 1 个。

【问题讨论】:

    标签: php mysql distinct


    【解决方案1】:

    如果您不关心应该返回具有相同 user_id 查询的哪条记录,那么

    SELECT id,user_id,msg_datetime FROM table_1 GROUP BY user_id ORDER BY msg_datetime DESC

    如果你想显示,例如,每个用户的最后一条记录,你需要

    SELECT a.user_id, a.last_time, b.id 
    FROM
    (SELECT user_id, MAX(msg_datetime) as last_time 
     FROM table1)a
    INNER JOIN table1 b ON (b.user_id = a.user_id AND b.msg_datetime = a.last_time)
    
    ORDER BY a.last_time;
    

    【讨论】:

      【解决方案2】:

      SELECT 语法:

      SELECT (fieldlists)
      FROM (table)
      [WHERE (conditions)]
      ORDER BY (something)
      

      你有点忘了说你想从哪个表中获取数据。

      【讨论】:

      • 我的代码中确实有表名,只是我没有在这里显示。
      【解决方案3】:

      您误解了 DISTINCT 的工作原理。它适用于 而不是字段。您想要的是分组最大值,也称为每个组的最大 n。

      这是在 MySQL 中执行此操作的一种方法:

      SELECT id, user_id, message, msg_datetime
      FROM (
          SELECT
              id, user_id, message, msg_datetime,
              @rn := CASE WHEN @prev_user_id = user_id
                          THEN @rn + 1
                          ELSE 1
                     END AS rn,
              @prev_user_id := user_id
          FROM (SELECT @prev_user_id := NULL) vars, Table1 T1
          ORDER BY user_id, msg_datetime DESC
      ) T2
      WHERE rn = 1
      ORDER BY msg_datetime
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 2011-02-05
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多