Laravel Sahaya göre sıralı sipariş 1,2,3,4,1,2,3,4

oy
29

Mal masam var

good_link, parent_link, name
sdf-sdfg   ffff         rock    
utyruuur   ffff         qwe     
gfhdfggg   dddd         paper   
sdfghvcx   eeee         water   
ncvbcxvb   dddd         tree    
dsgfdsg    zzzz         sdff
sdfsdff    zzzz         fdgdf
sdfgdgg    zzzz         sdfsdf
dsvfdgg    zzzz         ssdfgr
brtyfgh    zzzz         fgdfgdf

Nasıl veri elde etmek için parent_link'e göre veri sipariş edebilirim?

ffff
dddd
eeee
zzzz
ffff
dddd
zzzz
zzzz
zzzz
zzzz

böylece tüm mallar birbiri ardına ama her zaman farklı parent_link ile gider (önceki satır parent_link! = sonraki satır parent_link ve AZ siparişinde fark yoktur)?

Oluştur 19/05/2020 saat 13:03
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

bu kod mysql db üzerinde test edilmiştir.

ONLY_FULL_GROUP_BY'niz varsa devre dışı bırakmanız gerekir ...

SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))

ardından istediğiniz siparişi vermek için saklı bir yordam oluşturun:

CREATE PROCEDURE custom_order()
BEGIN

SET @restCount := 1;
CREATE TEMPORARY TABLE IF NOT EXISTS my_result_table
SELECT   * FROM goods group by parent_link order by parent_link;
CREATE TEMPORARY TABLE IF NOT EXISTS my_temp_table
SELECT   * FROM goods;

   WHILE @restCount >0 DO
   DELETE FROM my_temp_table where (name in (SELECT name FROM  my_result_table));
   INSERT into my_result_table(good_link,parent_link,name) select good_link,parent_link,name FROM my_temp_table group by parent_link order by parent_link;

  set @restCount=(SELECT COUNT(*) FROM my_temp_table);
   END WHILE;
  SELECT * FROM my_result_table;
END

o zaman ne istersen diyebilirsin ...

temel fikir iki geçici tablo yapmak, biri sonucu tutacak ve diğeri taşınan sıralı satırları kaldırmak için, her döngüde ... ayrı sıralı sıralar geçici olarak sonuç tablosuna taşınacaktır.

'name' sütununu benzersiz birincil anahtar olarak kabul ettiğinde, bunu uygun bir anahtarla değiştirebileceğinizi lütfen unutmayın. ayrıca, depolanan yordama parametre olarak sıralamak istediğiniz tablo adını ve sütun adını da iletebilirsiniz ...

benim db bir tablo yaptı, 'mal' olarak adlandırın ve sağladığınız kesin veri ekledi. lütfen bana yardımcı olup olmadığını bildirin

Cevap 21/05/2020 saat 23:09
kaynak kullanıcı

oy
0

MySQL 8 için basit kullanın

WITH cte AS ( SELECT good_link, 
                     parent_link, 
                     name,
                     ROW_NUMBER() OVER (PARTITION BY parent_link) AS rn -- may add any ORDER BY
              FROM source_table )
SELECT good_link, 
       parent_link, 
       name
FROM cte 
ORDER BY rn -- may add any additional expression

MySQL 5 için, örneğin kullanıcı tanımlı değişkenlere bağlı olarak ROW_NUMBER () öykünmesini kullanın.

Cevap 23/05/2020 saat 23:56
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more