Laravel Eloquent order by field as 1,2,3,4,1,2,3,4

hlasů
29

Mám tabulky zboží

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

Jak mohu objednat data pomocí parent_link tak, aby měla data jako

ffff
dddd
eeee
zzzz
ffff
dddd
zzzz
zzzz
zzzz
zzzz

Takže všechno zboží jde jeden po druhém, ale vždy s jiným parent_link (předchozí řádek parent_link! = další řádek parent_link a objednávka AZ nemá žádný rozdíl)?

Položena 19/05/2020 v 13:03
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

tento kód je testován na mysql db.

Pokud máte ONLY_FULL_GROUP_BY, musíte jej deaktivovat ...

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

pak vytvořte uloženou proceduru a proveďte požadované pořadí:

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

pak to můžete nazvat, co chcete ...

základní myšlenkou je vytvořit dvě časově tabulky, jedna bude držet výsledek a druhá pro odstranění přesunutých seřazených řádků, každou smyčku ... odlišné řádky budou přesunuty z dočasně do výsledkové tabulky.

Vezměte prosím na vědomí, že ve sloupci „jméno“ jako jedinečný primární klíč jej můžete změnit na vhodný. do uložené procedury můžete také předat název tabulky a název sloupce, který chcete třídit podle parametrů ...

Vytvořil jsem tabulku v mém db, pojmenoval jsem ji jako „zboží“ a vložil přesná data, která uvedete. Prosím, dejte mi vědět, pokud to pomůže

Odpovězeno 21/05/2020 v 23:09
zdroj uživatelem

hlasů
0

Pro MySQL 8 používejte jednoduché

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

Pro MySQL 5 použijte emulaci ROW_NUMBER () například na základě uživatelem definovaných proměnných.

Odpovězeno 23/05/2020 v 23:56
zdroj uživatelem

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