Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

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

Απάντηση
Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dimos_mitel » 22 Μάιος 2012 19:31

Καλησπέρα σε όλους. Αυτό που θέλω να κάνω είναι να εμφανίζω δεδομένα από πολλούς πίνακες που έχουνε το ίδιο id.

Έχω τους παρακάτω 4 πίνακες:

1) stoixeia_agwna (kwd_agwna, id_omadas1, id_omadas2, apotelesma, date),

2) stoixeia_diaititwn (kwd_diaititi, onoma, epwnimo, kwd_agwna),

3) stoixeia_sezon (kwd_periodou, katigoria, periodos, omilos, kwd_agwna),

4) paratiriseis (kwd_par, paratiriseis, kwd_agwna).

Το πεδίο kwd_agwna του πίνακα stoixeia_agwna είναι το κύριο κλειδί. Σε όλους τους υπόλοιπους πίνακες αποτελεί το ξένο.

Αυτό που θέλω τώρα είναι να εμφανίσω με ένα ερώτημα σε έναν πίνακα ανά ημερομηνία (date του πίνακα stoixeia_agwna) τα πεδία id_omadas1, idomadas2, apotelesma, date, onoma, epwnimo, katigoria, periodos, omilos και paratiriseis που έχουνε το ίδιο kwd_agwna ώστε να σχετίζονται μεταξύ τους.

Γνωρίζει κανένας με ποιο ερώτημα θα το καταφέρω αυτό;

Ευχαριστώ
miteletsis


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

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dva_dev » 22 Μάιος 2012 20:39

Δοκίμασε κάτι τέτοιο

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

select id_omadas1, idomadas2, apotelesma, `date`, onoma, epwnimo, katigoria, periodos, omilos, paratiriseis 
from stoixeia_agwna 
inner join stoixeia_diaititwn on (stoixeia_agwna.kwd_agwna = stoixeia_diaititwn.kwd_agwna)
inner join stoixeia_sezon on (stoixeia_agwna.kwd_agwna = stoixeia_sezon.kwd_agwna)
inner join paratiriseis on (stoixeia_agwna.kwd_agwna = paratiriseis.kwd_agwna)
Αν τώρα για κάποιον από αυτούς τους πίνακες μπορεί να μην έχεις εγγραφές με αντίστοιχο kwd_agwna (όπως μου φαίνεται πιθανό να ισχύει για τον paratiriseis) τότε αλλάζεις το αντίστοιχο inner join σε left join.

Επίσης το πεδίο που έχει όνομα date άλλαξε το σε κάτι σαν hmerominia ή date_agwna

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dimos_mitel » 23 Μάιος 2012 01:05

Τελικά παιδεύτηκα λίγο και πέτυχα αυτό που ήθελα με έναν ποιο "μπακάλικο" τρόπο, τον ανεβάζω σαν μια ακόμα λύση..

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

SELECT * FROM stoixeia_agwna, stoixeia_diaititwn, stoixeia_sezon,
paratiriseis where stoixeia_diaititwn.kwd_agwna=stoixeia_agwna.kwd_agwna && stoixeia_sezon.kwd_agwna=stoixeia_agwna.kwd_agwna
&& paratiriseis.kwd_agwna=stoixeia_agwna.kwd_agwna
θα δοκιμάσω και αυτό που μου πρότεινες dva_dev μου φαίνεται ποιο σωστό από τον τρόπο που βρήκα. Ευχαριστώ πολύ, να είσαι καλά.
miteletsis

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

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dva_dev » 23 Μάιος 2012 08:01

Αυτό που έχεις κάνει είναι το αντίστοιχο με τη διαφορά ότι φέρνεις όλα τα πεδία από όλους τους πίνακες όχι μόνο τα πεδία που είπες ότι θέλεις.
Επίσης βλέπω ότι χρησιμοποιείς τον operator &&, για τον οποίο θα πρότεινα να ρίξεις μια ματιά στο http://lists.mysql.com/mysql/216543

Η πρόταση μου είναι stick to the standards όσο περισσότερο γίνεται.

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dimos_mitel » 23 Μάιος 2012 09:33

Προσπάθησα να προσαρμόσω τον δικό σου τον κώδικα γι' αυτό τον λόγο αλλά δυστυχώς δεν δουλεύει.. κάτι γίνεται και δεν εμφανίζετε αποτέλεσμα.

Το έχω έτσι:

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

$query =mysql_query("select id_omadas1, idomadas2, apotelesma, date, onoma, epwnimo, katigoria, periodos, omilos, paratiriseis
from stoixeia_agwna
inner join stoixeia_diaititwn on (stoixeia_agwna.kwd_agwna = stoixeia_diaititwn.kwd_agwna)
inner join stoixeia_sezon on (stoixeia_agwna.kwd_agwna = stoixeia_sezon.kwd_agwna)
inner join paratiriseis on (stoixeia_agwna.kwd_agwna = paratiriseis.kwd_agwna)");
και μου εμφανίζει:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

καθώς δεν φέρνει αποτέλεσμα. Έλεγξα τα πεδία και τους πίνακες σε αυτό που μου έγραψες και είναι σωστά.

Όσον αφορά το && το έκανα AND! Ευχαριστώ.[/code]
miteletsis

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από Apostolis_38 » 23 Μάιος 2012 10:04

Κάποιο πεδίο δεν είναι σωστό.
Μήπως θέλει

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

id_omadas2
αντί για

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

idomadas2
;

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dimos_mitel » 23 Μάιος 2012 10:11

Πωωωω ναιιι αυτό είναι.. δεν το παρατήρησα καθόλου!! δουλεύει κανονικά τώρα.. ευχαριστώ Απόστολε ;)
miteletsis

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από Apostolis_38 » 23 Μάιος 2012 10:15

Επίτηδες το έβαλε ο dva για να σε τσεκάρει.
Και την πάτησες...
:D

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dimos_mitel » 23 Μάιος 2012 10:18

έτσι για να μ πονέσει λίγο το κεφάλι.. χαχα.. άντε ωραία.. τώρα
miteletsis

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

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dva_dev » 23 Μάιος 2012 15:40

dimos_mitel έγραψε:Αυτό που θέλω τώρα είναι να εμφανίσω με ένα ερώτημα σε έναν πίνακα ανά ημερομηνία (date του πίνακα stoixeia_agwna) τα πεδία id_omadas1, idomadas2, apotelesma, date, onoma, epwnimo, katigoria, periodos, omilos και paratiriseis που έχουνε το ίδιο kwd_agwna ώστε να σχετίζονται μεταξύ τους.
Εγώ απλά copy / paste έκανα. Δεν μπορώ να ξέρω αν τα πεδία είναι γραμμένα σωστά. Υποθέτω ότι αυτός που παίρνει μια απάντηση και πάει να τη δοκιμάσει την ελέγχει και την προσαρμόζει στα μέτρα του.

Don't shoot the piano player.

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dimos_mitel » 23 Μάιος 2012 15:56

Ναι τα έλεγξα ένα ένα και μου ξέφυγε αυτό..

Να ρωτήσω κάτι άσχετο τώρα. Έχω ένα πίνακα ομάδων:

stoixeia_omadwn (onoma_omadas, ar_arxigou, katigoria).

Αν δεις τον πίνακα των αγώνων έχω εκτός των άλλων και δύο πεδία (kwd_omadas1, kwd_omadas2)

Θέλω αντί να μου εμφανίζονται τα id των ομαδων (1,2,3) να γίνετε έλεγχος που θα μου εμφανίζει πχ.. σε περίπτωση που είναι να μου εμφανιστεί στον πίνακα το 1, αντί του 1 ο ΠΑΟΚ.. αντί του 2 η ΑΕΚ και πάει λέγοντας. Δηλαδή αντικατάσταση του id με ένα αντίστοιχο string από τον πίνακα stoixeia_omadwn. αναλόγως του id το onoma_omadas
miteletsis

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από Apostolis_38 » 23 Μάιος 2012 21:52

Αν τραβάς και τα ονόματα γιατί δεν τα εμφανίζεις κάνοντας ένα απλό echo;
Που είναι το πρόβλημα;

Άβαταρ μέλους
dimos_mitel
Δημοσιεύσεις: 279
Εγγραφή: 07 Αύγ 2009 21:06
Επικοινωνία:

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από dimos_mitel » 23 Μάιος 2012 22:13

Σκέφτηκα αν ήταν καλή λύση να χρησιμοποιήσω συνθήκη που να αντιστοιχεί κάθε id με το αντίστοιχο όνομα ομάδας.. όλα με έναν έλεγχο. Καθώς κάποιος που θα βλέπει την σελίδα τον ενδιαφέρει να δει το όνομα και όχι το id. Δεν ξέρω αν στον πίνακα stoixeia_agwna στα πεδία kwd_omadas1 και kwd_omadas2 θα ήταν καλύτερα να είχα ονόματα και όχι κωδικούς.. είναι και αυτός ένας προβληματισμός μου.
miteletsis

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Αντηλη δεδομένων από πολλούς πίνακες που έχουν το ίδιο id

Δημοσίευση από Apostolis_38 » 23 Μάιος 2012 22:56

Οσοι πάνε με το γράμμα του νόμου θα σου πουν μην το κάνεις, σύμφωνα με το normalization κάτι τέτοιο δεν είναι καλό.
Εγώ θα έλεγα αν οι εγγραφές πρόκειται να είναι λίγες κάντο. Καλό το normalization αλλά δεν είναι και πανάκεια.
Αν όμως οι εγγραφές πρόκειται να είναι πολλές μετά από λίγο θα χάσεις τη μπάλα οπότε άστο.
Βάλε κάποιο id στον πίνακα των στοιχείων των ομάδων και συνδεσέ το με το id_omadas1/2 με τον τρόπο που σου έδειξε ο dva_dev.

Απάντηση

Επιστροφή στο “MySQL”

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

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