gpt4 book ai didi

mysql - 如何在同一张表中找到相似的记录?

转载 作者:行者123 更新时间:2023-11-29 00:18:22 25 4
gpt4 key购买 nike

我有一个日程安排数据库,我想找到一种方法来选择所有类似的 future 约会,因为我们有很多客户自己重复预订。我一直在寻找,但找不到一种方法来做我想做的事。

例如,如果我有以下行,我希望能够选择具有相同语言、时间间隔在 15 分钟以内并且名称共享 > 70% 相同字符的行。

   |Rec_id|Date_time       |Language|App_name |
|1 |2014-03-15 12:40|Spanish |Ricardo |
|2 |2014-03-15 12:45|Spanish |Ricerdu |
|3 |2014-03-16 12:45|Tongan |Tuaffu |
|4 |2014-03-17 12:45|Korean |Kim |
|5 |2014-03-18 12:45|German |Biternof |
|6 |2014-03-18 12:32|German |Biterknof|

根据以上数据,我需要的记录是 1、2、5 和 6。

最佳答案

我首先想到的是 Levenshtein,但由于 MySQL 本身不支持它 - 事情变得有点复杂。

此解决方案未优化或根本不是最佳解决方案,但我应该完成这项工作。

  • 我会创建一个新列,我们称它为“Duplicate_for”,DEFAULT NULL。
  • 我会为这个表创建一个触发器:TRIGGER BEFORE INSERT。
  • 我会创建一个函数来计算两个字符串的 Levenshtein 距离。
  • 我会将 TRIGGER 和 Levenshtein 与以下查询结合使用。

触发器+查询本身:

DELIMITER //
CREATE TRIGGER `booking_before_insert` BEFORE INSERT ON `booking` FOR EACH ROW BEGIN
DECLARE existingId INT(10) DEFAULT NULL;

SELECT
MAX(id)
INTO
existingId
FROM
booking
WHERE
booking.dirty_id IS NULL AND
booking.lang = NEW.lang AND
booking.created >= DATE_SUB(NOW(), INTERVAL 15 MINUTE) AND
(LEVENSHTEIN(booking.name, NEW.name) / LENGTH(booking.name)) < 0.3;

SET NEW.dirty_id = existingId;
END//
DELIMITER ;

您可以从以下位置阅读有关 Levenshtein 的更多信息:

现在您可以使用 Duplicate_for 检测重复项。

关于mysql - 如何在同一张表中找到相似的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22025794/

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