SELECT randomly και UPDATE

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από servetas » 15 Μάιος 2013 14:44

Καλησπέρα σας,

Προσπαθώ τις τελευταίες μέρες να φτιάξω ένα query το οποίο θα με βοηθάει με κάποιον τρόπο να αποθηκεύω τα αποτελέσματα ενός random select από την βάση δεδομένων ούτως ώστε την επόμενη φορά που θα ανοίξει η σελίδα τα αποτελέσματα να είναι τα ίδια.

Έχετε καμία ιδέα; Ευχαριστώ πολύ!

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από dva_dev » 15 Μάιος 2013 16:04

Αυτό που λες είναι 2 διαδικασίες. Στην πρώτη θα κάνεις το random select από τον πρώτο πίνακα και θα αποθηκεύεις τα ids σε κάποιον δεύτερο πίνακα (να έχει και αυτός δικό του primary key autonumber).
Στη δεύτερη διαδικασία θα κάνεις select τις εγγραφές από τον πρώτο πίνακα με τη σειρά που έχουν καταχωρηθεί στον δεύτερο πίνακα.

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από servetas » 17 Μάιος 2013 00:27

Ουσιαστικά αυτό που σκέφτηκα να κάνω είναι να κάνω κανονικά το SELECT και αυτόματα στο ίδιο query να κάνω update αυτά που έγιναν SELECT. Το θέμα είναι πως μπορώ να το κάνω αυτό στην ίδια εντολή ή κάπως αλλιώς...

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από dva_dev » 17 Μάιος 2013 00:31

Ακόμα και αυτό που λες είναι 2 διαδικασίες. Η μία είναι update και η δεύτερη select. Η ανάποδα αν θέλεις.

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από servetas » 17 Μάιος 2013 00:33

Κατάλαβα, το θέμα μου είναι πως θα κάνω το UPDATE αυτόματα μετά το SELECT...

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από dva_dev » 17 Μάιος 2013 00:35

Και τη δεύτερη (τρίτη, τέταρτη, κ.ο.κ) φορά που θα θέλεις να ξανακάνεις select τα δεδομένα με το random order που είχες δημιουργήσει την 1η φορά πως θα το κάνεις;

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από servetas » 17 Μάιος 2013 00:39

Ουσιαστικά και λίγο μπακαλίστικα... με το update θα θέτω σε μια στήλη του πίνακα ένα συγκεκριμένο id. Όταν κάποιος θα μπαίνει στην σελίδα, το σύστημα θα ελέγχει αν υπάρχουν values με το αντίστοιχο id, αν ναι τότε θα τα εμφανίζει. Αν όχι, τότε θα εκτελεί το SELECT και το UPDATE αντίστοιχα.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από geomagas » 17 Μάιος 2013 07:50

Καλημέρα,
Στον ορισμό του προβλήματος σου φαντάστηκα κάτι σαν το παρακάτω, σε υπεραπλουστευμένη μορφή:

Κώδικας: Επιλογή όλων

CREATE TABLE `brand` (
  `code` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`code`)
)

INSERT INTO `brand` (`code`, `name`) VALUES
(1, 'Peugeot'),
(2, 'Citroen'),
(3, 'Mercedes'),
(4, 'VW'),
(5, 'Opel'),
(6, 'Fiat'),
(7, 'Seat'),
(8, 'Lamborghini'),
(9, 'Rolls Royce'),
(10, 'Audi');

CREATE TABLE `brand_rnd` (`brand_code` int(11) NOT NULL)
Και για την αρχικοποίηση του πίνακα brand_rnd:

Κώδικας: Επιλογή όλων

INSERT INTO brand_rnd (brand_code) SELECT code FROM `brand` ORDER BY RAND()
( Στο τελευταίο σου post όμως, έκανες τα πράγματα πιο περίπλοκα... :-? )
Είναι κάπως έτσι; Αν ναι, τι θέλεις να κάνεις από εκεί και κάτω; Αν όχι, δώσε ένα δικό σου minimal δείγμα δεδομένων και μία μικρή περιγραφή της λογικής σου, και το συζητάμε.

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1948
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από Alice_Cooper » 17 Μάιος 2013 11:38

me vash ton user tha alazei to ti tha emfanizete?
me vash tin hmerominia??? h ti?

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από servetas » 23 Μάιος 2013 12:38

Καλησπέρα σας,

Η βάση δεδομένων αυτήν την στιγμή αποτελείται από 2 πίνακες. Ο ένας πίνακας είναι ο flights ο οποίος ας πούμε ότι έχει τρείς στήλες (id, flightnum, pax). Στην συνέχεια έχουμε έναν πίνακα που ονομάζεται passengers με τέσσερις στήλες (id, name, age, type). Ουσιαστικά, έχω δημιουργήσει ένα function το οποίο τραβάει τυχαία από τον πίνακα passengers τόσα values όσα έχουν οριστεί στο πεδίο pax του πίνακα flights. Ουσιαστικά όμως, όπως προείπα και όπως είναι φυσιολογικό, όταν κάνω reload τότε το αποτέλεσμα στον πίνακα αλλάζει. Το τι εμφανίζεται θέλω να αποθηκεύεται με βάση το id του flights οπότε στο επόμενο reload να βγουν τα ίδια αποτελέσματα.

Συγνώμη για την καθυστέρηση αλλά είχα κάποια θέματα και δεν μπορούσα να απαντήσω... :D

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από geomagas » 23 Μάιος 2013 13:34

Καλημέρα,
Έστω δηλαδή

Κώδικας: Επιλογή όλων

CREATE TABLE IF NOT EXISTS `flights` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `flightnum` varchar(20) NOT NULL,
  `pax` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `passengers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `age` int(11) NOT NULL,
  `type` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Χρειάζεσαι και έναν τρίτο πίνακα συσχέτισης, ας πούμε έτσι:

Κώδικας: Επιλογή όλων

CREATE TABLE IF NOT EXISTS `flight_passengers` (
  `flight` int(11) NOT NULL,
  `passenger` int(11) NOT NULL,
  PRIMARY KEY (`flight`,`passenger`),
  KEY `passenger` (`passenger`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `flight_passengers`
  ADD CONSTRAINT `flight_passengers_ibfk_2` FOREIGN KEY (`passenger`) REFERENCES `passengers` (`id`),
  ADD CONSTRAINT `flight_passengers_ibfk_1` FOREIGN KEY (`flight`) REFERENCES `flights` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
...όπου θα αποθηκεύονται οι passengers που θα κάνεις select randomly για κάθε flight.
Τώρα, στο function που θα φτιάξεις (τροποποιήσεις), και έστω $flight_id, $flight_pax έχουν οριστεί, θα πρέπει να ελέγχεις αν το

Κώδικας: Επιλογή όλων

"SELECT COUNT(*) FROM flight_passengers where flight='$flight_id'"
είναι 0.
Αν ναι, τότε κάνε

Κώδικας: Επιλογή όλων

"INSERT INTO flight_passengers (flight,passenger) SELECT '$flight_id',id FROM `passengers` ORDER BY RAND() LIMIT 0,$flight_pax"
Τέλος, κάνεις (πάντα, και ανεξάρτητα από το παραπάνω if)

Κώδικας: Επιλογή όλων

"SELECT * FROM passengers p,flight_passengers fp WHERE p.id=fp.passenger and fp.flight='$flight_id'"
Σημείωσε ότι το παραπάνω είναι σε απλουστευμένη μορφή και δεν προβλέπει καταστάσεις όπως πχ τι γίνεται αν το πεδίο pax αλλάξει τιμή, ενώ ο flight_passengers έχει εγγραφές για αυτό το flight_id.
Ελπίζω να βοήθησα.

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

SELECT randomly και UPDATE

Δημοσίευση από servetas » 27 Μάιος 2013 00:14

Φίλε μου καλησπέρα,

Τελικά δούλεψε μια χαρά! Σε ευχαριστώ πολύ...

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης