【问题标题】:How to give serial no to records with condition in Mysql query如何在Mysql查询中为有条件的记录提供序列号
【发布时间】:2017-11-13 19:44:25
【问题描述】:

我有一张桌子,其中存储了两种类型的产品。一个表用于具有唯一 ID 的单个项目,另一个表用于组合具有相同 ID 的项目组合,如下图所示:

我必须在我的 SQL 中运行更新查询,它会为此提供序列号 Sno。 如果DealCode 相同,则分配相同的序列号,否则递增。请注意,如果DealCode 为 0,则应递增。 0 代表不同的产品。

【问题讨论】:

    标签: php mysql conditional


    【解决方案1】:

    也许这会对你有所帮助-

    您可以通过为此创建存储过程来执行上述任务

    假设您有一个名为“product”的表

    存储过程定义 --

    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;
    }
    
    ?>
    

    【讨论】:

    • 亲爱的@Jyoti,感谢您的友好回复。可以更简化吗,或者我可以通过PHP来做吗?
    • 嗨@SaleemJafar,抱歉耽搁了,我也更新了php的答案。希望这会对你有所帮助。
    • 亲爱的@Jyoti,非常感谢。你真的让我很开心。我花了太多天来完成这项任务。但我做不到。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 2015-03-27
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多