theodoros8 Δημοσ. 31 Μαΐου 2013 Δημοσ. 31 Μαΐου 2013 (επεξεργασμένο) Γεια χαρα.Θέλω τα φώτα σας για ενα script σε php. Εχω ένα php που κάνει το εξης: Μέσα σε χιλιάδες entries σε ένα table σε Mysql διάλεγει τύχαια ενα απο αυτά (σύμφωνα με το id) και το κάνει echo. Μετά το σβήνει απο το table (ώστε να μην το ξαναδιαλέξει) και έπειδη το id του δεν θα ειναι διαθέσιμο ξαναδημιουργω το column id (το οποιο είναι auto_incremental) ωστε να μην υπάρχουν κενά στις καταχωρήσεις. Η ερώτηση μου για τους gurus των DB ειναι αν το παρων script ειναι ασφαλές για την DB μου λογω του ότι σβηνει/δημιουργει στην βάση πολυ συχνα(σε κάθε refresh της σελίδας).Υπάρχει χώρος βελτίωσης?Αν έχετε ιδέες για βελτίωση τοτε pls πείτε μου. Ιδου και το scipt: <?php require("db.php"); mt_srand((double)microtime()*1000000); $db = new PDO("mysql:host=$host;dbname=$dbname", "$username", "$password"); $max_id="SELECT MAX( id ) FROM trapezi"; $sth = $db->prepare($max_id); $sth->execute(); $result = $sth->fetch(PDO::FETCH_NUM); $id_max=$result[0]; $id=rand(1, $id_max); $query_string="SELECT * FROM trapezi where id='".$id."'"; foreach ($db->query($query_string) as $row) { echo $row['frasi']; try { $db->beginTransaction(); $stmt = $db->exec('DELETE FROM `trapezi` where id='.$row['id']); $stmt = $db->exec('ALTER TABLE `trapezi` DROP `id`'); $stmt = $db->exec('ALTER TABLE `trapezi` ADD `id` INT NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY ( `id` )'); $stmt = $db->exec('OPTIMIZE TABLE trapezi'); $db->commit(); } catch (PDOException $e) { echo $e; } } $db=null; ?> Επεξ/σία 31 Μαΐου 2013 από theodoros8
PavelX Δημοσ. 31 Μαΐου 2013 Δημοσ. 31 Μαΐου 2013 1. Το transaction που έχεις είναι άχρηστο επειδή η MySQL στο ALTER θα κάνει αυτόματα commit. 2. Βάλε ένα πεδίο ΤΙΝΥΙΝΤ "is_used" το οποίο θα ορίζεις σε 1 όταν μια εγγραφή θα έχει χρησιμοποιηθεί, και στο ερώτημα ανάκτησης θα προσθέσεις το "WHERE is_used = 0" για να επιστρέφει μόνο τα μη χρησιμοποιημένα. 3. Αν επιμένεις στην διαγραφή, το SELECT σου να γίνει ως εξής: SELECT * FROM trapezi ORDER BY RAND() LIMIT 1; (αυτό το SELECT θα αντικαταστήσει και τα 2 SELECT που έχεις και τα ALTER επίσης).
theodoros8 Δημοσ. 1 Ιουνίου 2013 Μέλος Δημοσ. 1 Ιουνίου 2013 οκ ευχαριστω,θα δοκιμασω τις προτασεις σου.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα