gpt4 book ai didi

mysql - 根据第一个值的时间戳删除 MySQL 重复条目行

转载 作者:行者123 更新时间:2023-11-29 01:59:20 25 4
gpt4 key购买 nike

我有一个问题,实际上是关于如何根据第一个 SELECT 的名称和时间戳删除 MySQL 表中所有重复项的最简单方法的问题。

所以,我有这张表:

SELECT * FROM search;
+------+--------+------------+--------------------------+-----------------------+
| id | uid | string | cat | timestamp |
+------+--------+------------+--------------------------+-----------------------+
|39523 | 87 |eat to live | a:1:{i:0;s:5:"toate";} | 2013-10-07 17:01:41 |
|39524 | 87 |eat to live | s:6:"author"; | 2013-10-07 17:01:41 |
|39525 | 87 |eat to live | s:6:"people"; | 2013-10-07 17:01:41 |
|39526 | 87 |eat to live | s:7:"company"; | 2013-10-07 17:01:41 |
|39527 | 87 |eat to live | s:6:"author"; | 2013-10-07 17:01:42 |
|39532 | 31 | friends | a:1:{i:0;s:5:"toate";} | 2013-10-07 17:04:17 |
|39533 | 31 | friends | s:6:"people"; | 2013-10-07 17:04:17 |
|39534 | 31 | friends | s:7:"company"; | 2013-10-07 17:04:17 |
|39535 | 31 | friends | s:6:"author"; | 2013-10-07 17:04:17 |
+------+--------+------------+--------------------------+-----------------------+

而我只想留下第一个独特的外表。我的解决方案是选择所有行,遍历它们,并为每一行删除匹配相同字符串的所有行,相同的 uid 和时间戳是相同的时间戳或 +1 秒。

有什么想法/建议吗?我可以在 PHP 中执行此操作,想知道是否有更简单的方法直接使用 SQL 查询执行此操作。

谢谢

最佳答案

MySQL 支持多表 DELETE,因此您可以进行自连接,以便只删除具有更大 id 的行。

DELETE s2
FROM search AS s1 JOIN search AS s2
ON s1.string = s2.string AND s1.uid = s2.uid AND s1.id < s2.id;

如果您想向联接添加一些逻辑,以便它仅在匹配的 s2 行与第一行的距离不超过 1 秒时才删除,您也可以这样做:

DELETE s2
FROM search AS s1 JOIN search AS s2
ON s1.string = s2.string AND s1.uid = s2.uid AND s1.id < s2.id;
AND s2.timestamp <= s1.timestamp+1

但是,如果您在一行中有许多条目,每行间隔 1 秒,这将删除除第一个以外的所有条目。我不确定在那种情况下你想做什么。

关于mysql - 根据第一个值的时间戳删除 MySQL 重复条目行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com