sql >> Database >  >> RDS >> Mysql

hoe hetzelfde serienummer te geven voor een groep records in mysql

Je groepen worden gedefinieerd door te beginnen met code = 100 . Dit is een beetje lastig. In MySQL 8+ kunt u vensterfuncties gebruiken om de groepen te definiëren en vervolgens row_number() om het serial_number toe te wijzen :

select c.*, 
       row_number() over (partition by grp order by id) as serial_number
from (select c.*,
             sum( code = 100 ) over (order by id) as grp
      from carts c
     ) c;

Dit is veel gecompliceerder in eerdere versies van MySQL.

U kunt de groep identificeren met behulp van een subquery:

select c.*,
       (select count(*)
        from carts c2
        where c2.id <= c.id and c2.code = 100
       ) as grp
from carts c;

U kunt dan variabelen gebruiken om de gewenste informatie te krijgen:

select c.*,
       (@rn := if(@g = grp, @rn + 1,
                  if(@g := grp, 1, 1)
                 )
       ) as serial_number
from (select c.*,
             (select count(*)
              from carts c2
              where c2.id <= c.id and c2.code = 100
             ) as grp
      from carts c
      order by grp, id
     ) c cross join
     (select @g := -1, @rn := 0) params;


  1. Hoe de primaire index te hernummeren

  2. TIMESTAMPDIFF() Voorbeelden – MySQL

  3. PHP Fatale fout:oproep naar ongedefinieerde functie mysqli_stmt_get_result()

  4. SQL-query om product_type te controleren in WooCommerce