【问题标题】:How do I fetch data from SQL after sorting and making sure none are repeated排序后如何从 SQL 中获取数据并确保没有重复
【发布时间】:2020-08-14 03:06:03
【问题描述】:

所以我有一个数据库,该表的标题类似于“LAT、LNG、NAME、EMAIL、DATE、TIME”

这是通过将 php 地图页面与数据库连接以获取数据来在地图上显示标记。

现在我的问题是:

例如: 我有电子邮件 ID 的数据集:abc@gmail.com 重复了 10 次。每个都有不同的 LAT 和 LONG。 我有电子邮件 ID 的数据集:xyz@gmail.com 重复了 10 次。每个都有不同的 LAT 和 LONG。 我有电子邮件 ID 的数据集:efg@gmail.com 重复了 10 次。每个都有不同的 LAT 和 LONG。

如何只获取最新的数据集?我只想要 3 个最新的标记,而不是 30 个标记。

我可以使用插入的日期和时间对其进行排序,但如何将其设置为只接收一个。

我的 SQL 查询:$sql = "SELECT DISTINCT email, latitude, longitude, name from test ORDER BY date DESC, time DESC";

我尝试了 DISTINCT,也尝试了 DESC LIMIT 1,但都没有得到想要的结果。也没有错误信息。我错过了什么?

请帮我解决这个问题。

问候 阿比萨

【问题讨论】:

    标签: php mysql date datetime greatest-n-per-group


    【解决方案1】:

    您可以使用子查询进行过滤:

    select t.*
    from test t
    where concat(t.date, ' ', t.time) = (
        select max(concat(t1.date, ' ', t1.time))
        from test t1
        where t1.email = t.email
    )
    

    请注意,您不应将日期和时间组件存储在两个不同的列中。当您需要实际生成合法的 datetime 值时,这会使事情变得更加复杂 - 效率会因此受到影响。

    【讨论】:

    • 非常感谢.. 这真的很有帮助。我对此很陌生..您是否可以解释上述声明。另外..会将日期和时间更改为日期时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多