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

Πως να αλλαξω το id βάση άλλου πινακα σε mysql?


Predatorkill

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

Δημοσ.

Καλησπερα παιδια,

 

εχω ενα πινακα "table".

 

H διαταξη ειναι αυτη:

id|||||||||||||||| region ||||||||||||||| city ||||||||||||||| municipality

1|||||||||||||||||Μεσσηνια ||||||||||||||Καλαματα||||||||||||||Κεντρο

2||||||||||||||||| Αττικη ||||||||||||||| Αθηνα ||||||||||||||||Αγιος Δημητριος

 

ας πουμε λοιπον πως θελω να αλλαξω το "id" με βαση το αλφαβητικο order του "city". Εχω περιπου 200 γραμμες και ειναι ολες ανακατεμενες, αυτο που θελω ειναι να κανω αλφαβητικο ordering και το id να ειναι βαση αυτου.

 

Τι sql command πρεπει να τρεξω;

 

Ευχαριστω

Δημοσ.

select id,city(όλες οι στήλες με τον χαρακτήρα *)

from table

order by city asc(το asc είναι αύξουσα αλφαβητική σειρά κ το desc φθίνουσα)

 

Αν κατάλαβα καλά αυτό που θες!

Δημοσ.

Δεν θελω να κανω απλη προβολη, θελω να κανω reindex το id με βαση το asc.

 

Ετσι οπως ειναι τωρα, ειναι ανακατεμενη, θελω αφου κανω asc order τις πολης να αλλαξω ολα τα id.

 

Μπορω να το κανω χειροκινητα αλλα θελει πολυ κοπο!

 

 

iphone.png

Δημοσ.

Δες εδώ που έχει ένα query που δίνει σαν αποτέλεσμα αυτό που θέλεις. Για να το περάσεις στη ΒΔ, θα μπορούσες να το σώσεις το αποτέλεσμα από το query σε κάποιο csv,excel,txt και μετά να το κάνεις import.

Δημοσ.

Αν γνωρίζεις από 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 γιατί δεν το χρειαζόμαστε

 

 

Δημοσ.

Σας ευχαριστω πολυ παιδια! Θα το δοκιμασω και θα επανελθω.

 

Ερωτηση λιγο off topic:

 

Εαν μια βαση εχει ανακατεμενα στοιχεια (οχι αλφαβητικα δλδ), γυρω στα 400 πχ, οταν καποιος κανει μια απλη select * from table order by id εχει επιπτωση στο performance; Δεν προοριζεται για web server αλλα για smartphone, γι αυτο ρωταω.

Δημοσ.

Σίγουρα θα έχει κάποια επίπτωση στο performance. Ordering, aggregate functions κλπ. δεν είναι «τσάμπα» (από υπολογιστική άποψη) στην χρήση τους.

Δημοσ.

Καλό θα ήταν στα πεδία που κάνεις order να βάλεις κάποιο index, θα βοηθήσει λιγάκι στο performance. Πάντως, ακόμα και να ξαναδώσεις τα ids όπως θέλεις, δεν σου εγγυάται κανείς ότι όντως οι εγγραφές θα είναι αποθηκευμένες με αυτήν τη σειρά. Ειδικότερα κιόλας αν κάνεις και insert/update/delete στα δεδομένα.

 

Από περιέργεια, σε τι smartphone τρέχεις τη mysql;

 

 

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...