Predatorkill Δημοσ. 20 Ιουνίου 2011 Δημοσ. 20 Ιουνίου 2011 Καλησπερα παιδια, εχω ενα πινακα "table". H διαταξη ειναι αυτη: id|||||||||||||||| region ||||||||||||||| city ||||||||||||||| municipality 1|||||||||||||||||Μεσσηνια ||||||||||||||Καλαματα||||||||||||||Κεντρο 2||||||||||||||||| Αττικη ||||||||||||||| Αθηνα ||||||||||||||||Αγιος Δημητριος ας πουμε λοιπον πως θελω να αλλαξω το "id" με βαση το αλφαβητικο order του "city". Εχω περιπου 200 γραμμες και ειναι ολες ανακατεμενες, αυτο που θελω ειναι να κανω αλφαβητικο ordering και το id να ειναι βαση αυτου. Τι sql command πρεπει να τρεξω; Ευχαριστω
antbyron Δημοσ. 20 Ιουνίου 2011 Δημοσ. 20 Ιουνίου 2011 select id,city(όλες οι στήλες με τον χαρακτήρα *) from table order by city asc(το asc είναι αύξουσα αλφαβητική σειρά κ το desc φθίνουσα) Αν κατάλαβα καλά αυτό που θες!
Predatorkill Δημοσ. 20 Ιουνίου 2011 Μέλος Δημοσ. 20 Ιουνίου 2011 Δεν θελω να κανω απλη προβολη, θελω να κανω reindex το id με βαση το asc. Ετσι οπως ειναι τωρα, ειναι ανακατεμενη, θελω αφου κανω asc order τις πολης να αλλαξω ολα τα id. Μπορω να το κανω χειροκινητα αλλα θελει πολυ κοπο!
_tasos Δημοσ. 21 Ιουνίου 2011 Δημοσ. 21 Ιουνίου 2011 Δες εδώ που έχει ένα query που δίνει σαν αποτέλεσμα αυτό που θέλεις. Για να το περάσεις στη ΒΔ, θα μπορούσες να το σώσεις το αποτέλεσμα από το query σε κάποιο csv,excel,txt και μετά να το κάνεις import.
Uberalles_gr Δημοσ. 21 Ιουνίου 2011 Δημοσ. 21 Ιουνίου 2011 Αν γνωρίζεις από PHP παρακάτω είναι η λύση Ο τωρινός σου πίνακας είναι ο cities (ας πούμε). Αρχικά, θα δημιουργήσεις έναν νέο πίνακα στην βάση σου με την ίδια δομή του cities και θα τοn πεις cities_new. Βέβαια, το id θα πρέπει να είναι Primary key και auto increment Μετά γράφεις σε php > $q1 = mysql_query("SELECT region, city, municipality FROM cities ORDER BY city"); while($r1 = mysql_fetch_array($q1)) { $region = $r1['region']; $city = $r1['city']; $municipality = $r1['municipality ']; $sql = "INSERT INTO cities_new (region, city, municipality ) VALUES ('".$region ."', '".$city ."', '".$municipality ."') "; if (mysql_query($sql)) { echo "Η καταχώρηση έγινε με επιτυχία για την πόλη '".$city."'."; } else { echo "Η καταχώρηση ΔΕΝ έγινε με επιτυχία για την πόλη '".$city."'."; } } Έτσι στον πίνακα cities_new θα έχεις αυτό που θέλεις. Υ.Γ. Το id δεν το τράβηξα από τον πίνακα cities γιατί δεν το χρειαζόμαστε
Predatorkill Δημοσ. 22 Ιουνίου 2011 Μέλος Δημοσ. 22 Ιουνίου 2011 Σας ευχαριστω πολυ παιδια! Θα το δοκιμασω και θα επανελθω. Ερωτηση λιγο off topic: Εαν μια βαση εχει ανακατεμενα στοιχεια (οχι αλφαβητικα δλδ), γυρω στα 400 πχ, οταν καποιος κανει μια απλη select * from table order by id εχει επιπτωση στο performance; Δεν προοριζεται για web server αλλα για smartphone, γι αυτο ρωταω.
parsifal Δημοσ. 22 Ιουνίου 2011 Δημοσ. 22 Ιουνίου 2011 Σίγουρα θα έχει κάποια επίπτωση στο performance. Ordering, aggregate functions κλπ. δεν είναι «τσάμπα» (από υπολογιστική άποψη) στην χρήση τους.
_tasos Δημοσ. 22 Ιουνίου 2011 Δημοσ. 22 Ιουνίου 2011 Καλό θα ήταν στα πεδία που κάνεις order να βάλεις κάποιο index, θα βοηθήσει λιγάκι στο performance. Πάντως, ακόμα και να ξαναδώσεις τα ids όπως θέλεις, δεν σου εγγυάται κανείς ότι όντως οι εγγραφές θα είναι αποθηκευμένες με αυτήν τη σειρά. Ειδικότερα κιόλας αν κάνεις και insert/update/delete στα δεδομένα. Από περιέργεια, σε τι smartphone τρέχεις τη mysql;
Predatorkill Δημοσ. 23 Ιουνίου 2011 Μέλος Δημοσ. 23 Ιουνίου 2011 Ευχαριστω για τις απαντησεις παιδια! Οταν λες να βαλω index τι εννοεις; Ποια εντολη ειναι αυτη; Πειραματιζομαι στο iPhone.
_tasos Δημοσ. 23 Ιουνίου 2011 Δημοσ. 23 Ιουνίου 2011 Η εντολή είναι η CREATE INDEX, π.χ. CREATE INDEX my_index ON table(id). http://dev.mysql.com/doc/refman/5.0/en/create-index.html
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.