Προς το περιεχόμενο
  • 0

Προσθήκη αριθμών σε NULL γραμμές MySql


mihosmihos

Ερώτηση

Καλησπέρα παιδιά, έχω στην βάση μου έναν πίνακα με όνομα 't1' που έχει 11 στήλες και 100 γραμμές. Η τελευταία στήλη με όνομα 'f11' αποτελείται απο 100 NULL γραμμές. Αυτό που θέλω να κάνω είναι να ορίσω σε αυτή την στήλη τις πρώτες 30 γραμμές να πάρουν την τιμή 1, τις επόμενες 30 την τιμή 2 και τις άλλες 40 την τιμή 3. Πως μπορώ να εκτελέσω το κατάλληλο ερώτημα για την παραπάνω απορία;

Ευχαριστώ προκαταβολικά για την οποιαδήποτε βοήθεια!

post-246338-0-68905200-1507663892_thumb.jpg

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

6 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

  • 0

Update tablename set f11 = 1

Limit 30

 

....

Limit 30,60

....

Limit 60,100

Σε ευχαριστώ πάρα πολύ για την βοήθεια αλλά αντιμετωπίζω το εξής πρόβλημα. Εκτέλεσα το πρώτο ερώτημα με όριο 30 αλλά στην επόμενη εκτέλεση έβαλα Limit 31,60 και μου βγάζει σφάλμα.

 

https://imgur.com/PxyAoRZ

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Από τα docs της MySQL

 

 

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

 

Επίσης, πιο safe θα ήταν να χρησιμοποιήσεις το primary key (where) για να ξέρεις τι ακριβώς κάνεις update. Έτσι σκέτο update μυρίζει λίγο στην τύχη με ποια σειρά θα επεξεργαστεί τις εγγραφές.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Πως θα πρέπει δηλαδή να γράψω το σωστό ερώτημα για την παραπάνω απορία μου? Κατάφερα με την εντολή που είπε ο φίλος παπι να βάλω μόνο στις 30 πρώτες εγγραφές το 1. Για να βάλω την τιμή 2 απο το 31 ως το 60 πως είναι το σωστό?

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Σωστο θα ηταν να κανεις update βάση κάποιας αλληε τιμης. Πχ αν το column foo εχει bar τότε στο fee βαλε x. Anyway, εσυ βλεπεις αυτα τα δεδομενα με αυτη την σειρα οσο δεν καμεξς delete ή κατι αλλο που θα εχει side effect στο ordering.

 

Για δες limit 30 offset 30

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Δημοσ. (επεξεργασμένο)
SET @rownumber = -1;    
update t1 set f11 = FLOOR((@rownumber:[email protected]+1)/30)+1;

άκυρο τώρα είδα ότι θες διαφορετικά τις τελευταίες 40. Το παραπανω παίζει για σετ των 30

 

αλλά επειδή βαριέμαι να το αλλάζω 

SET @rownumber = -1;   
update t1 set f11 = FLOOR((@rownumber:[email protected]+1)/30)+1
LIMIT 60;

update t1
set f11 = 3
where f11 is null;

χωρίς order by θα γίνουν update οπως τα φέρει η mysql

 

το offset σύμφωνα με το manual δεν παίζει με το update. 

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET assignment_list
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

μπορεί να γίνει έτσι όμως απλα με limit χωρίς offset

update t1
set f11 =1
where f11 is null
limit 30;

update t1
set f11 =2
where f11 is null
limit 30;

update t1
set f11 =3
where f11 is null;
Επεξ/σία από Aztec
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε έναν λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι εύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.