【问题标题】:MySQL Query Distinct in Paris PHP巴黎PHP中的MySQL查询不同
【发布时间】:2012-11-28 08:22:27
【问题描述】:

我需要使用 Paris/idiorm PHP 来构建我的查询。我尝试了很多可能性,但找不到解决方案。我是 PHP 和 SQL 的新手,对 ORM 了解不多。我只是想有人会帮助我构建查询以获取上次更新时间戳的不同名称。

-----------------------------------------
id  |   name       |    timestamp
-----------------------------------------
1   |   testuser   |  2012-11-19 17:02:48
2   |   testuser   |  2012-11-28 11:15:46
3   |   testuser   |  2012-11-19 11:02:49
4   |   testadmin  |  2012-11-28 10:50:05
5   |   testadmin  |  2012-11-28 11:15:46
-----------------------------------------

我进行了以下查询,并且能够获取名称和它们的第一个时间戳,但无法获取最新的时间戳

    $output = ORM::for_table('sample')
                ->raw_query('SELECT id,name,timestamp FROM sample GROUP BY name',array())
                ->find_many();

希望有办法解决这个问题。

【问题讨论】:

  • 抱歉我的问题中的错字。

标签: php mysql sql idiorm


【解决方案1】:

获取子查询中每个名称的最新时间戳,然后将其连接回自身。试试看,

SELECT a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT name, MAX(timestamp) maxStamp
            FROM tableName
            GROUP BY name
        ) b ON a.name = b.name AND
                a.timestamp = b.maxStamp

【讨论】:

  • 测试用户的时间戳不是最新的。它显示与 sqlfiddle 中的 testadmins 相同的时间戳
  • 是的,但有没有更好的方法来做到这一点?因为我使用 paris php 为我构建查询。我执行了上面的原始查询,它需要更多的时间来为我提供结果。 ?
  • 您的表中是否正确定义了索引?
  • 是的,有一个 primary_index 作为 id。
  • 工作方式完全符合我的预期,非常感谢 KJ。
【解决方案2】:
$output = ORM::for_table('sample')
  ->distinct()
  ->raw_query('SELECT id,name,timestamp FROM sample GROUP BY name',array())
  ->find_many();

【讨论】:

    【解决方案3】:
     $output = ORM::for_table('sample')
                    ->raw_query('SELECT DISTINCT(name),id,timestamp FROM sample ORDER BY id DESC',array())
                    ->find_many();
    

    希望对你有帮助

    我尝试将它订购 DESC 给你将获得用户的最后或最新日志

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多