Laravel Eloquent mező szerinti sorrendben 1,2,3,4,1,2,3,4

szavazat
29

Van árutáblám

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

Hogyan rendelhetek adatokat szülői link alapján, hogy ilyen adatok legyenek

ffff
dddd
eeee
zzzz
ffff
dddd
zzzz
zzzz
zzzz
zzzz

tehát minden áru egymás után megy, de mindig eltérő szülő_linkkel (előző sor szülő_link! = következő sor szülő_link, és az AZ rendelésnek nincs különbsége)?

A kérdést 19/05/2020 13:03
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

ezt a kódot a mysql db-n teszteljük.

ha ONLY_FULL_GROUP_BY van, akkor tiltsa le ...

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

majd hozzon létre egy tárolt eljárást a kívánt rendelés elkészítéséhez:

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

akkor bármikor felhívhatja ...

az alapötlet az, hogy két ideiglenes táblát készítsen, az egyik megtartja az eredményt, a másik pedig az áthelyezett rendezett sorok eltávolítását, minden egyes ciklus alatt ... a különálló rendezett sorok időben átkerülnek az eredménytáblába.

Felhívjuk figyelmét, hogy ha a 'név' oszlopot egyedi elsődleges kulcsnak tekinti, akkor megfelelőre változtathatja. átadhatja a tárolt eljárás paramétereként a táblázatok és az oszlopok nevét is, amelyeket paraméterezni szeretne ...

elkészítettem egy táblát a db-ben, neveztem „áruknak”, és beillesztettem a megadott pontos adatokat. kérlek tudassa velem, ha segít

Válaszolt 21/05/2020 23:09
a forrás felhasználó

szavazat
0

A MySQL 8 esetén egyszerűen használható

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

A MySQL 5 esetén használjon például a ROW_NUMBER () emulációt, a felhasználó által definiált változók alapján.

Válaszolt 23/05/2020 23:56
a forrás felhasználó

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