Gio123 Δημοσ. 8 Μαρτίου 2015 Δημοσ. 8 Μαρτίου 2015 Καλησπέρα, Έχω ένα πίνακα(exercise) όπου θέλω να πάρω ως αποτέλεσμα μόνο τις διπλοεγγραφές με ίδιο id_exercise. Έχω δημιουργήσει αυτό το query $sql1 = "SELECT * FROM sortable_exer a join (SELECT id_exercise,id_cooperation,id_Statement,dateStar FROM exercise WHERE number_priority=1 group by id_exercise having count(*)>1) b on a.id_exercise=b.id_exercise"; σύμφωνα με αυτό που βρήκα εδώ http://stackoverflow.com/questions/10324107/show-all-duplicated-rows αλλά τα πράγματα δεν πήγαν όπως θα ήθελα. Καμία ιδέα για το πώς μπορώ να το διορθώσω; Ευχαριστώ.
StathisG Δημοσ. 8 Μαρτίου 2015 Δημοσ. 8 Μαρτίου 2015 Όπως έκανε ο OP στο stack overflow, δώσε κι εσύ ένα παράδειγμα που να περιέχει το schema της βάσης σου (τα κομμάτια που μας ενδιαφέρουν) και ένα δείγμα δεδομένων.
Gio123 Δημοσ. 9 Μαρτίου 2015 Μέλος Δημοσ. 9 Μαρτίου 2015 Όπως έκανε ο OP στο stack overflow, δώσε κι εσύ ένα παράδειγμα που να περιέχει το schema της βάσης σου (τα κομμάτια που μας ενδιαφέρουν) και ένα δείγμα δεδομένων. Έχω αυτόν τον πίνακα id_statement | id_exercise | number_priority 1213 4116 1 1214 4116 1 1215 7263 1 κτλ το id_statement είναι το κλειδί του πίνακα. Αυτό που θέλω είναι να πάρω τις γραμμές όπου το number_priority είναι 1 και το id_exercise εμφανίζεται πάνω από μία φορά. Δηλαδή τις 2 πρώτες γραμμές του πίνακα σε αυτό το παράδειγμα.
StathisG Δημοσ. 9 Μαρτίου 2015 Δημοσ. 9 Μαρτίου 2015 Πιθανότατα να υπάρχει και πιο efficient τρόπος, αλλά τέτοια ώρα τέτοια λόγια, οπότε να δύο ιδέες για το προς τα που μπορείς να κινηθείς: SELECT * FROM `exercises` WHERE `id_exercise` IN ( SELECT `id_exercise` FROM `exercises` GROUP BY `id_exercise` HAVING COUNT(`id_exercise`) > 1 ) AND `number_priority` = 1 fiddle SELECT `table_a`.* FROM `exercises` as `table_a` INNER JOIN `exercises` as `table_b` ON `table_a`.`id_exercise` = `table_b`.`id_exercise` GROUP BY `table_b`.`id_statement` HAVING COUNT(`table_b`.`id_statement`) > 1 fiddle
Gio123 Δημοσ. 9 Μαρτίου 2015 Μέλος Δημοσ. 9 Μαρτίου 2015 Φίλε το πρώτο και το δεύτερο μου τυπώνουν ναι μεν τις διπλοεγγραφές, αλλά μου τυπώνουν και γιαυτά τα οποία το count('id_exercise')=1 για κάποιο περιέργο λόγο. Δοκίμασα και εγώ το fiddle βάζοντας και άλλες τιμές και δούλευε μια χαρά. Μου εμφανίζει το count('id_exercise')=1 γιατί υπάρχουν id_exercise και σε άλλες γραμμές αλλά με number_priority >1.Δηλαδή κάτι τέτοιο, από τι κατάλαβα. ιd_statement | id_exercise | number_priority 29184 6533 1 267722 6533 2
StathisG Δημοσ. 9 Μαρτίου 2015 Δημοσ. 9 Μαρτίου 2015 Ναι, ξέχασα αρχικά να βάλω τον έλεγχο για το number_priority και μετά τον έβαλα στα γρήγορα μόνο στο πρώτο και αυτό σε λάθος σημείο. Πρέπει να μπει μέσα στο subquery: SELECT * FROM `exercises` WHERE `id_exercise` IN ( SELECT `id_exercise` FROM `exercises` WHERE `number_priority` = 1 GROUP BY `id_exercise` HAVING COUNT(`id_exercise`) > 1 ) fiddle SELECT `table_a`.* FROM `exercises` as `table_a` INNER JOIN `exercises` as `table_b` ON `table_a`.`id_exercise` = `table_b`.`id_exercise` WHERE `table_b`.`number_priority` = 1 GROUP BY `table_b`.`id_statement` HAVING COUNT(`table_b`.`id_statement`) > 1 fiddle
Gio123 Δημοσ. 9 Μαρτίου 2015 Μέλος Δημοσ. 9 Μαρτίου 2015 Μια χαρά αυτό, αλλά μου εμφανίζει και τις γραμμές όπου το number_priority>1 Δηλαδή ιd_statement | id_exercise | number_priority 1213 4116 1 1222 4116 1 1414 4116 3
StathisG Δημοσ. 9 Μαρτίου 2015 Δημοσ. 9 Μαρτίου 2015 Στα fiddles που έδωσα δεν το κάνει, αγνοεί το 8888 που έχει τρεις εγγραφές, αλλά το number_priority του είναι 2. edit: άκυρο, τώρα πρόσεξα πως υπάρχουν διαφορετικά priorities στο ίδιο id_exercise. Θα το κοιτάξω αργότερα όταν βρω χρόνο. Αν εν τω μεταξύ βρεις λύση, post-αρέ την.
Gio123 Δημοσ. 9 Μαρτίου 2015 Μέλος Δημοσ. 9 Μαρτίου 2015 Στα fiddles που έδωσα δεν το κάνει, αγνοεί το 8888 που έχει τρεις εγγραφές, αλλά το number_priority του είναι 2. edit: άκυρο, τώρα πρόσεξα πως υπάρχουν διαφορετικά priorities στο ίδιο id_exercise. Θα το κοιτάξω αργότερα όταν βρω χρόνο. Αν εν τω μεταξύ βρεις λύση, post-αρέ την. Φίλε έβαλα το `number_priority` = 1 και έξω από την παρένθεση και δούλεψε μια χαρά..!!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα