排序后如何从 SQL 中获取数据并确保没有重复
Posted
技术标签:
【中文标题】排序后如何从 SQL 中获取数据并确保没有重复【英文标题】:How do I fetch data from SQL after sorting and making sure none are repeated 【发布时间】: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,但都没有得到想要的结果。也没有错误信息。我错过了什么?
请帮我解决这个问题。
问候 阿比萨
【问题讨论】:
【参考方案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
值时,这会使事情变得更加复杂 - 效率会因此受到影响。
【讨论】:
非常感谢.. 这真的很有帮助。我对此很陌生..您是否可以解释上述声明。另外..会将日期和时间更改为日期时间。以上是关于排序后如何从 SQL 中获取数据并确保没有重复的主要内容,如果未能解决你的问题,请参考以下文章
无法从从 sql 数据库读取的 javascript 函数中获取返回数组 [重复]