Php 从数据库中的文本文件获取数据的查询之间的MySQLi

Php 从数据库中的文本文件获取数据的查询之间的MySQLi,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个问题: $sql = "SELECT * FROM table WHERE CONCAT(Prod, Serial) BETWEEN '$start' AND '$end'"; 其中Prod和Serial作为字符串存储在MySQLi数据库中。我需要更新AA1000和AA1005之间项目的详细信息。当我运行此查询时,它会更新AA1000和AA1005之间的单位的详细信息,“作为奖金”,所有单位都在AA10000和AA10050之间。 是否有一种方法可以使用BETWEEN查询获得文本类型

我有一个问题:

$sql = "SELECT * FROM table WHERE  CONCAT(Prod, Serial) BETWEEN '$start' AND '$end'";
其中Prod和Serial作为字符串存储在MySQLi数据库中。我需要更新AA1000和AA1005之间项目的详细信息。当我运行此查询时,它会更新AA1000和AA1005之间的单位的详细信息,“作为奖金”,所有单位都在AA10000和AA10050之间。 是否有一种方法可以使用BETWEEN查询获得文本类型字段的精确匹配

谢谢


另外,我知道我需要更新查询来更新详细信息。我使用SELECT进行测试。

您以一种非常糟糕的方式滥用了
BETWEEN
语法。你在比较字符串,所以

'AA1000' <= 'AA10000' <= 'AA1005'

'AA1000'我个人从未遇到过需要它的情况,但我相信你可以用正则表达式来实现这一点

此查询应执行以下操作:

SELECT *
FROM TABLE
WHERE Prod = LEFT('$start', 2)
AND CAST(Serial AS DECIMAL) BETWEEN SUBSTRING('$start', 3) AND SUBSTRING('$end', 3);
您还可以在PHP中拆分开始字符串和结束字符串:

$prod = substr($start, 0, 2);
$start_code = substr($start, 2);
$end_code = substr($end, 2);

$sql = "SELECT *
FROM TABLE
WHERE Prod = '$prod'
AND CAST(Serial AS DECIMAL) BETWEEN $start_code AND $end_code";

迄今为止,已开展了以下工作:

 CONVERT(SUBSTRING('$startunit', 3),UNSIGNED INTEGER) 

谢谢大家

$start
$end
是否始终具有相同的字母前缀,或者它们可能是
AA1000
BB1005
?是不是
$start
$end
的产品部分始终只有两个字符?可以是不同的。。有很多,比如bb dd da ma su等,但它们只有两个,所以在AA1000和BB1005之间的
情况下,您希望返回什么?虽然可以将范围表示为regexp,一般情况下会非常复杂。谢谢Barmar,但将$start设置为AA1500,将$end设置为AA1503将返回34而不是3个结果…什么数据类型是串行的?我假设它是
INT
。到目前为止,下面的工作已经完成:CONVERT(子字符串('$startunit',3),无符号整数)
 CONVERT(SUBSTRING('$startunit', 3),UNSIGNED INTEGER)