比较来自 mysql 列的数组,然后在具有相同列数组的每一行中插入一些内容

Compare arrays from mysql-colums then insert something in each row with same colum-array

情况:

A mysql-table 有三列 NameAreasType
Name 包含一位客户
Areas 包含位置数组(area1、area2、area3...)
Type 目前为空

如果有帮助或需要:
所有名称(计数:可以变化)和区域(计数:50)都是已知的,但组成未知并且每个名称都可能不同

目标:

到select所有Areas相同的Name然后在Type列插入一个字母

ID = 1; Name = 姓名 1; Areas = 区域 1, 区域 2;
ID = 2; Name = 姓名2; Areas = 区域 1、区域 2、区域 3;
ID = 3; Name = 姓名 3; Areas = 区域 1, 区域 2;
ID = 4; Name = 姓名4; Areas = area5,area8,area2,area4
ID = 5; Name = 姓名4; Areas = area6;

Name1 和 Name3 Type = A
姓名 2 Type = B
Name4Type = C
姓名 5 Type = D

到目前为止尝试过的事情
搜索(找到了一些接近的好方法)
multi_array_search
从数组
中获取相同的值 在角落里哭泣,希望找到解决办法
但是当阵列应该相互检查区域时,这一切都失败了。

尝试了 foreach(x as xy) 然后 for ($i = 0; $i < count(xy); $i++)
也许只需要这段代码?

但没有真正按照需要的方式解决问题。

感谢任何帮助 =)

如果已经问了抱歉,但我没有发现任何真正有用的东西,或者 searched/looked 错误的条款。

使用这个查询:

SELECT id, areas
FROM YourTable
ORDER BY areas

然后在 PHP 代码中,测试 areas 值何时更改,并递增 type

$type = '';
$last_areas = null;
$update_stmt = $pdo->prepare("UPDATE YourTable SET type = :type WHERE id = :id");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    if ($row['areas'] != $last_areas) {
        $type = next_type($type);
        $last_areas = $row['areas'];
    }
    $update_stmt->execute(array(':type' => $type, ':id' => $row['id']));
}

function next_type($cur_type) {
    if ($cur_type == '') {
        return 'A';
    }
    $last_letter = substr($cur_type, -1);
    if ($last_letter = 'Z') {
        $new_letter = 'A';
        if (strlen($cur_type) == 1) {
            $first_letter = 'A';
        } else {
            $first_letter = chr(ord($cur_type[0]) + 1);
        }
        return $first_letter . $new_letter;
    } else {
        $new_letter = chr(ord($last_letter) + 1);
        if (strlen($cur_type) == 1) {
            return $new_letter;
        } else {
            return $cur_type[0] . $new_letter;
        }
    }
}

这个 next_type 功能只要您不必输入 3 个字母就可以使用。