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

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


mihosmihos

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

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

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

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Update tablename set f11 = 1

Limit 30

 

....

Limit 30,60

....

Limit 60,100

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

 

https://imgur.com/PxyAoRZ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Από τα docs της MySQL

 

 

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

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

Για δες limit 30 offset 30

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
SET @rownumber = -1;    
update t1 set f11 = FLOOR((@rownumber:=@rownumber+1)/30)+1;

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

 

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

SET @rownumber = -1;   
update t1 set f11 = FLOOR((@rownumber:=@rownumber+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
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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