如何在 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;
}

?>