MySQL子行编号

时间:2016-02-19 23:49:56

标签: mysql lines

MySQL子行编号(仅限MySQL,不含PHP ...)

EX:调用的行号

表格所有调用的所有行

*----------*--------*-------*------*--------*
* bill_num *  item  * price * qte  * sl_num *
*----------*--------*-------*------*--------*
*       10 * js1eee * 12.10 *    3 *        *
*       10 * ft78eg * 15.10 *    7 *        *
*       10 * ite489 * 10.10 *    5 *        *
*       10 * ite78b * 24.10 *    6 *        *
*       11 * it785b * 39.10 *    7 *        *
*       11 * it7889 * 78.10 *    9 *        *
*       11 * it7899 * 41.10 *    7 *        *
*       12 * ite489 * 41.10 *    8 *        *
*       12 * ite78b * 33.10 *    7 *        *

查询后

*----------*--------*-------*------*--------*
* bill_num *  item  * price * qte  * sl_num *
*----------*--------*-------*------*--------*
*       10 * js1eee * 12.10 *    3 *      1 *
*       10 * ft78eg * 15.10 *    7 *      2 *
*       10 * ite489 * 10.10 *    5 *      3 *
*       10 * ite78b * 24.10 *    6 *      4 *
*       11 * it785b * 39.10 *    7 *      1 *
*       11 * it7889 * 78.10 *    9 *      2 *
*       11 * it7899 * 41.10 *    7 *      3 *
*       12 * ite489 * 41.10 *    8 *      1 *

我还没有在互联网上找到解决方案 我开发了这个技巧

UPDATE bill AS a
LEFT JOIN
(
    SELECT bill_num  FROM bill
    GROUP BY bill_num
) AS b ON b.bill_num=a.bill_num 

SET sl_num = @ordre := IF(a.bill_num= @bill_num_mem, @ordre+1, ( @bill_num_mem:=b.bill_num) OR @ordre:=1)
WHERE  b.bill_num=a.bill_num 

在我的情况下它可以工作,但与其他MySQL版本,字符串而不是插入...?

我认为不那么复杂,更可靠

感谢Barmar,它的工作是一条线路。围绕变量可能更简单的解决方案吗?

UPDATE bill AS a
LEFT JOIN
(
  SELECT DISTINCT bill_num FROM bill ORDER BY bill_num
) AS b ON b.bill_num=a.bill_num 

SET sl_num = @ordre := IF(a.bill_num= @bill_num_mem, @ordre+1, ( @bill_num_mem:=b.bill_num) OR @ordre:=1)
WHERE  b.bill_num=a.bill_num 

0 个答案:

没有答案