如何在 Mysql 查询中为具有条件的记录提供序列号
How to give serial no to records with condition in Mysql query
我有一个 table,其中存储了两种类型的产品。一个 table 用于具有唯一 ID 的单个项目,另一个用于具有相同 ID 的项目组合,如下图所示:
我必须 运行 在我的 SQL 中进行更新查询,这将为此提供序列号 Sno
。
如果 DealCode
相同,则分配相同的序列号,否则递增。请注意,如果 DealCode
为 0,则应递增。 0 代表不同的产品。
也许这会对你有所帮助-
您可以通过为此创建存储过程来执行上述任务
假设您有一个名为 "product"
的 table
存储过程定义--
DELIMITER $$
DROP PROCEDURE IF EXISTS assignSerialNo$$
CREATE PROCEDURE `assignSerialNo`()
BEGIN
DECLARE x INT;
DECLARE y INT;
DECLARE data INT;
DECLARE countNonZeroRecord INT;
DECLARE countZeroRecord INT;
SET x = 1;
SET countNonZeroRecord = ( SELECT count(*) FROM product where DealCode != 0 );
SET countZeroRecord = ( SELECT count(*) FROM product where DealCode = 0 );
WHILE x <= countZeroRecord DO
SET data = ( SELECT WebTransactionDetailNo from product WHERE Sno = 0 LIMIT 1 );
UPDATE product SET Sno = x WHERE WebTransactionDetailNo = data; SET x = x + 1;
END WHILE;
SET y = 1;
WHILE y <= countNonZeroRecord DO
SET data = ( SELECT DealCode from product WHERE Sno = 0 AND DealCode !=0 LIMIT 1 );
UPDATE product SET Sno = x WHERE DealCode = data; SET x = x + 1;
SET y = y + 1;
END WHILE;
END
调用程序设置流水号。使用语法 -
获取记录
调用 assignSerialNo()
**
对于PHP:
如果你想用核心 php 完成上述任务,那么你可以使用下面的代码:
希望对你有帮助
$connection = mysqli_connect("hostName","userName","password","databaseName");
$x=0;
$nonZeroDealCodeResult = runQuery("SELECT count(*) as countRecords FROM product where DealCode != 0",$connection);
$zeroDealCodeResult = runQuery("SELECT count(*) as countRecords FROM product where DealCode = 0",$connection);
while($zeroDealCodeResult['countRecords']) {
$x++;
$searchQuery = "SELECT WebTransactionDetailNo from product WHERE Sno = 0 AND DealCode = 0 LIMIT 1";
$data = runQuery($searchQuery,$connection);
mysqli_query($connection, "UPDATE product SET Sno = {$x} WHERE WebTransactionDetailNo = {$data['WebTransactionDetailNo']}");
$zeroDealCodeResult['countRecords']--;
}
while($nonZeroDealCodeResult['countRecords']) {
$x++;
$searchQuery = "SELECT DealCode from product WHERE Sno = 0 AND DealCode !=0 LIMIT 1";
$data = runQuery($searchQuery,$connection);
mysqli_query($connection, "UPDATE product SET Sno = {$x} WHERE DealCode = {$data['DealCode']}");
$nonZeroDealCodeResult['countRecords']--;
}
function runQuery($searchQuery,$connection) {
$dataQuery = mysqli_query($connection, $searchQuery);
$data = mysqli_fetch_assoc($dataQuery) ;
return $data;
}
?>
我有一个 table,其中存储了两种类型的产品。一个 table 用于具有唯一 ID 的单个项目,另一个用于具有相同 ID 的项目组合,如下图所示:
我必须 运行 在我的 SQL 中进行更新查询,这将为此提供序列号 Sno
。
如果 DealCode
相同,则分配相同的序列号,否则递增。请注意,如果 DealCode
为 0,则应递增。 0 代表不同的产品。
也许这会对你有所帮助-
您可以通过为此创建存储过程来执行上述任务
假设您有一个名为 "product"
的 table存储过程定义--
DELIMITER $$
DROP PROCEDURE IF EXISTS assignSerialNo$$
CREATE PROCEDURE `assignSerialNo`()
BEGIN
DECLARE x INT;
DECLARE y INT;
DECLARE data INT;
DECLARE countNonZeroRecord INT;
DECLARE countZeroRecord INT;
SET x = 1;
SET countNonZeroRecord = ( SELECT count(*) FROM product where DealCode != 0 );
SET countZeroRecord = ( SELECT count(*) FROM product where DealCode = 0 );
WHILE x <= countZeroRecord DO
SET data = ( SELECT WebTransactionDetailNo from product WHERE Sno = 0 LIMIT 1 );
UPDATE product SET Sno = x WHERE WebTransactionDetailNo = data; SET x = x + 1;
END WHILE;
SET y = 1;
WHILE y <= countNonZeroRecord DO
SET data = ( SELECT DealCode from product WHERE Sno = 0 AND DealCode !=0 LIMIT 1 );
UPDATE product SET Sno = x WHERE DealCode = data; SET x = x + 1;
SET y = y + 1;
END WHILE;
END
调用程序设置流水号。使用语法 -
获取记录调用 assignSerialNo()
**
对于PHP:
如果你想用核心 php 完成上述任务,那么你可以使用下面的代码:
希望对你有帮助
$connection = mysqli_connect("hostName","userName","password","databaseName");
$x=0;
$nonZeroDealCodeResult = runQuery("SELECT count(*) as countRecords FROM product where DealCode != 0",$connection);
$zeroDealCodeResult = runQuery("SELECT count(*) as countRecords FROM product where DealCode = 0",$connection);
while($zeroDealCodeResult['countRecords']) {
$x++;
$searchQuery = "SELECT WebTransactionDetailNo from product WHERE Sno = 0 AND DealCode = 0 LIMIT 1";
$data = runQuery($searchQuery,$connection);
mysqli_query($connection, "UPDATE product SET Sno = {$x} WHERE WebTransactionDetailNo = {$data['WebTransactionDetailNo']}");
$zeroDealCodeResult['countRecords']--;
}
while($nonZeroDealCodeResult['countRecords']) {
$x++;
$searchQuery = "SELECT DealCode from product WHERE Sno = 0 AND DealCode !=0 LIMIT 1";
$data = runQuery($searchQuery,$connection);
mysqli_query($connection, "UPDATE product SET Sno = {$x} WHERE DealCode = {$data['DealCode']}");
$nonZeroDealCodeResult['countRecords']--;
}
function runQuery($searchQuery,$connection) {
$dataQuery = mysqli_query($connection, $searchQuery);
$data = mysqli_fetch_assoc($dataQuery) ;
return $data;
}
?>