Laravel Eloquent κατά σειρά ως 1,2,3,4,1,2,3,4

ψήφοι
33

Έχω τραπέζι εμπορευμάτων

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

Πώς μπορώ να παραγγείλω δεδομένα από το γονικό link για να έχω δεδομένα όπως

ffff
dddd
eeee
zzzz
ffff
dddd
zzzz
zzzz
zzzz
zzzz

οπότε όλα τα προϊόντα πηγαίνουν το ένα μετά το άλλο, αλλά πάντα με διαφορετικό γονικό σύνδεσμο (προηγούμενη σειρά γονικός σύνδεσμος! = επόμενη σειρά γονικός σύνδεσμος και η παραγγελία ΑΖ δεν έχει καμία διαφορά);

Δημοσιεύθηκε 19/05/2020 στις 13:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

αυτός ο κωδικός δοκιμάζεται στο mysql db.

εάν έχετε ONLY_FULL_GROUP_BY, πρέπει να το απενεργοποιήσετε ...

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

Στη συνέχεια, δημιουργήστε μια αποθηκευμένη διαδικασία για να κάνετε την παραγγελία που θέλετε:

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

τότε μπορείτε να το ονομάσετε ό, τι θέλετε ...

η βασική ιδέα είναι να φτιάξουμε δύο χρονικά πίνακες, ο ένας θα κρατήσει το αποτέλεσμα και ένας άλλος να αφαιρέσει μετακινούμενες ταξινομημένες σειρές, κάθε βρόχο εν τω μεταξύ ... οι διακριτές σειρές που θα ταξινομηθούν θα μετακινηθούν από χρονικά στον πίνακα αποτελεσμάτων.

λάβετε υπόψη ότι αν θεωρήσετε τη στήλη «όνομα» ως το μοναδικό πρωτεύον κλειδί, μπορείτε να το αλλάξετε σε κατάλληλο. Μπορείτε επίσης να περάσετε το όνομα του πίνακα και το όνομα της στήλης που θέλετε να ταξινομήσετε ως παραμέτρους στην αποθηκευμένη διαδικασία ...

Έκανα έναν πίνακα στο db μου, το ονόμασα ως «αγαθά» και εισήγαγα τα ακριβή δεδομένα που παρέχετε. παρακαλώ ενημερώστε με αν βοηθάει

Απαντήθηκε 21/05/2020 στις 23:09
πηγή χρήστη

ψήφοι
0

Για MySQL 8 χρησιμοποιήστε απλό

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 χρησιμοποιήστε προσομοίωση ROW_NUMBER (), για παράδειγμα, βάσει μεταβλητών που καθορίζονται από το χρήστη.

Απαντήθηκε 23/05/2020 στις 23:56
πηγή χρήστη

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