Laravel Eloquent rekkefølge etter felt som 1,2,3,4,1,2,3,4

stemmer
33

Jeg har varebord

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

Hvordan kan jeg bestille data etter parent_link for å ha data som

ffff
dddd
eeee
zzzz
ffff
dddd
zzzz
zzzz
zzzz
zzzz

så alle varer går etter hverandre, men alltid med annen parent_link (forrige rad parent_link! = neste rad parent_link, og bestilling av AZ har ingen forskjell)?

Publisert på 19/05/2020 klokken 13:03
kilden bruker
På andre språk...                            


2 svar

stemmer
0

denne koden er testet på mysql db.

Hvis du har ONLY_FULL_GROUP_BY, må du deaktivere det ...

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

lag deretter en lagret prosedyre for å lage den ordren du ønsker:

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

så kan du kalle det hva du vil ...

den grunnleggende ideen er å lage to midlertidige tabeller, en vil holde resultatet og en annen for å fjerne flyttede sorterte rader, hver gang sløyfe ... de forskjellige ordnede radene vil bli flyttet fra midlertidig til resultattabell.

Vær oppmerksom på at når du ser på kolonnen 'navn' som den unike primære nøkkelen, kan du endre den til en passende. Du kan også gi tabellnavnet og kolonnenavnet du vil sortere etter som parametere til den lagrede prosedyren ...

Jeg lagde en tabell i db-en, kalte den som 'varer' og la inn de nøyaktige dataene du oppgir. vennligst gi meg beskjed om det hjelper

Svarte 21/05/2020 kl. 23:09
kilden bruker

stemmer
0

For MySQL 8 bruk enkelt

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

For MySQL 5 bruk ROW_NUMBER () -emulering, for eksempel basert på brukerdefinerte variabler.

Svarte 23/05/2020 kl. 23:56
kilden bruker

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