比较来自 mysql 列的数组,然后在具有相同列数组的每一行中插入一些内容
Compare arrays from mysql-colums then insert something in each row with same colum-array
情况:
A mysql-table 有三列 Name
、Areas
和 Type
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 个字母就可以使用。
情况:
A mysql-table 有三列 Name
、Areas
和 Type
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 个字母就可以使用。