gpt4 book ai didi

php - MYSQL PHP : Find duplicates based on Address Column

转载 作者:行者123 更新时间:2023-12-04 09:31:52 24 4
gpt4 key购买 nike

我的 MYSQL 数据库中有一个地址表,其结构如下:

  • 第一个列 ID 是一个主要的、自动递增的列。
  • 第二列名称是 varchar。
  • 第三列包含地址(文本),由用户填写。
  • 第四列包含地址slug,基本上是小写的地址(第三列),没有任何特殊字符。
  • 最后一列包含记录的创建日期。

  • enter image description here
    我希望根据地址/地址块显示所有记录并突出显示可能的重复项。
    在这种情况下,重复项如下:
  • 记录 1 和记录 2
  • 记录 3 和记录 6

  • Is there a way to partially match a string in MYSQL or PHP, to achieve the above results?


    仅供引用:我已经浏览过 SPHINX PHP、SQL FULLTEXT SEARCHES 等。
    我已经挣扎了 2 个多星期,但找不到任何最佳解决方案。
    欢迎任何想法,建议,解决方案。

    最佳答案

    laravel最初被标记,后来被删除,我认为该策略仍然可以提供帮助。
    这是给定的列表:

    $lists = [
    [
    'id' => 1,
    'text' => '2693 Edgewood Road Exit',
    ],
    [
    'id' => 2,
    'text' => '4408 Cost 4657 Avenue',
    ],
    [
    'id' => 3,
    'text' => '2693 Mapleview Road',
    ],
    [
    'id' => 4,
    'text' => '4657 Cost Edgewood Avenue',
    ],
    [
    'id' => 5,
    'text' => '4408 Mapleview Drive Road',
    ]
    ];
    目标是从每个中找到重复/重复的文本。

    由于找到一个单词的重复不是一个真实的场景,我想用 找到重复。两个字所有可能的组合。
        $combinations = [];
    foreach ($lists as $list) {

    $insideCombo = [];
    $insideText = explode(' ', $list['text']);
    $length = count($insideText);

    for ($i = 0; $i < $length; $i++) {
    for ($j = $i + 1; $j < $length; $j++) {
    if (isset($insideText[$j])) {
    $insideCombo[] = $insideText[$i] . ' ' . $insideText[$j];
    }
    }
    }

    $combinations[$list['id']] = $insideCombo;
    }
    这是要回来的
    // for '2693 Edgewood Road Exit'
    1 => array:6 [
    0 => "2693 Edgewood"
    1 => "2693 Road"
    2 => "2693 Exit"
    3 => "Edgewood Road"
    4 => "Edgewood Exit"
    5 => "Road Exit"
    ]

    现在,我们再次循环以比较可能的重复。在这里,我们利用 Laravel 的 Str::containsAll()
    $copyCat = [];
    foreach ($lists as $list) {
    foreach ($combinations as $comboKey => $combination) {
    /* no need to compare the text with itself &&
    * to avoid duplication of '4 to 2' if '2 to 4' is already mentioned
    */
    if ($list['id'] != $comboKey && $list['id'] < $comboKey) {
    foreach ($combination as $row) {
    if (Str::containsAll($list['text'], explode(' ', $row))) {
    $copyCat[] = $list['id'] . ' matches with ' . $comboKey . ' with "' . $row . '"';
    }
    }
    }
    }
    }

    最终回复 $copyCat
    array:5 [
    0 => "1 matches with 3 with [2693 Road]"
    1 => "2 matches with 4 with [4657 Cost]"
    2 => "2 matches with 4 with [4657 Avenue]"
    3 => "2 matches with 4 with [Cost Avenue]"
    4 => "3 matches with 5 with [Mapleview Road]"
    ]
    让我在下面的评论中发布。干杯!

    关于php - MYSQL PHP : Find duplicates based on Address Column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62808117/

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