⊗ppPmDOFR 385 of 447 menu

Συσχετίσεις Δεδομένων στην PHP

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

Πρέπει να σκεφτούμε πώς θα αποθηκεύσουμε τα δεδομένα. Η πρώτη ιδέα που μπορεί να έρθει στο μυαλό - είναι να δημιουργήσουμε δύο πίνακες: parents για τους πατέρες και sons για τους γιους. Στη συνέχεια να συνδέσουμε αυτούς τους πίνακες με κάποιο πεδίο: son_id ή parent_id.

Ωστόσο, αυτή η ιδέα δεν είναι πολύ καλή - γιατί το ίδιο άτομο μπορεί να είναι ταυτόχρονα και πατέρας και γιος - και θα πρέπει να το αποθηκεύσουμε και στους δύο πίνακες, κάτι που είναι άβολο, καταλαμβάνει περισσότερο χώρο και εύκολα οδηγεί σε λάθη.

Μια καλύτερη επιλογή - είναι να συνδέσουμε τον πίνακα με τον εαυτό του: ας δημιουργήσουμε τον πίνακα users, σε αυτόν θα αποθηκεύσουμε όλους τους χρήστες και σε κάθε έναν θα δώσουμε ένα πεδίο son_id, στο οποίο θα αποθηκεύεται το id του γιου από τον ίδιο πίνακα:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Ερωτήματα

Ας γράψουμε τώρα ένα ερώτημα που θα ανακτήσει τον χρήστη μαζί με τον γιο του.

Αρχικά, ας ανακτήσουμε απλώς τους χρήστες:

SELECT * FROM users

Τώρα ας κάνουμε join στους χρήστες με τους γιους τους. Θα κάνουμε join τον πίνακα με τον εαυτό του, επομένως χρειάζεται να τον μετονομάσουμε:

LEFT JOIN users as sons

Τώρα μπορούμε να καθορίσουμε τη σχέση του κύριου πίνακα και του μετονομασμένου πίνακα:

LEFT JOIN users as sons ON sons.id=users.son_id

Ας καθορίσουμε τώρα τα πεδία:

SELECT users.name as user_name, sons.name as son_name

Ας τα ενώσουμε όλα μαζί και θα πάρουμε το ακόλουθο ερώτημα:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

Πρακτικά Προβλήματα

Ας υποθέσουμε ότι έχουμε κατηγορίες. Κάθε κατηγορία μπορεί να ανήκει σε μια γονική κατηγορία, η οποία με τη σειρά της μπορεί να ανήκει στη δική της γονική κατηγορία και ούτω καθ' εξής. Περιγράψτε τη δομή αποθήκευσης.

Γράψτε ένα ερώτημα που θα ανακτήσει μια κατηγορία μαζί με τη γονική της κατηγορία.

Γράψτε ένα ερώτημα που θα ανακτήσει μια κατηγορία μαζί με τον γονέα της και τον παππού της.

Γράψτε ένα ερώτημα που θα ανακτήσει μια κατηγορία μαζί με τον γονέα της, τον παππού της και τον προ-παππού της.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη