Ερώτημα με JOIN για γερούς λύτες

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

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

Απάντηση
Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από Akis_gr49 » 24 Απρ 2009 23:46

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

Έχω 4 πίνακες

- Katigories (Εδώ είναι όλες οι κατηγορίες μαζί με τις υποκατηγορίες)
cat_id
cat_name

- Arthra (Εδώ είναι όλα τα κείμενα)
content_id
content_name

- YpokatigoriesKatigories (Εδώ ποιες είναι οι υποκατηγορίες και σε ποιες κατηγορίες ανήκουν)
cat_parent_id
cat_child_id

- ArthraKatigories (Εδώ ποια κείμενα ανήκουν σε ποιες υποκατηγορίες)
cat_id
content_id


Θέλω να πάρω τα εξής δεδομένα
Τα ονόματα και τα id των κειμένων καθώς και σε ποιες κατηγορίες και υποκατηγορίες ανήκουν

Σίγουρα γίνεται με Joins αλλά δεν έχω ιδέα. Ότι έχω κάνει δεν μου δουλεύει.
Κάθε βοήθεια ευπρόσδεκτη παιδιά.

Ευχαριστώ πολύ!

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από cherouvim » 25 Απρ 2009 01:17

Πριν τη λύση είσαι διατεθειμένος για συζήτηση του σχήματος και πιθανές αλλαγές;

Πόσες κατηγορίες έχεις;
Τα άρθρα σίγουρα τα θες με πολλές κατηγορίες αντί για μία μόνο;
Στις κατηγορίες θέλεις μόνο ένα επίπεδο; Γιατί να μην τις κρατάς όλες σε ένα πίνακα και με το όφελος τον άπειρων επιπέδων βάθους στο δέντρο;

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από Akis_gr49 » 25 Απρ 2009 01:21

Δεν μπορώ να αλλάξω την βάση και τους πίνακες της γιατί υπάρχουν 100άδες κείμενα και 10άδες κατηγορίες.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από cherouvim » 25 Απρ 2009 01:23

Δεν μπορείς να αλλάξεις το σχήμα επειδή δεν σου επιτρέπεται ή επειδή έχεις δεδομένα μέσα (και δε ξέρεις πως να το κάνεις);

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από Akis_gr49 » 25 Απρ 2009 01:33

Δεν μου επιτρέπεται να το αλλάξω διότι έτσι όπως είναι οι πίνακες παίρνουν δεδομένα κι άλλες εφαρμογές από αυτό. Δεν είναι τα δεδομένα το πρόβλημα αλλά οι πολλές εφαρμογές που είναι γραμμένες με αυτούς τους πίνακες.

Αλλά δεν είναι καλογραμμένοι; Μια χαρά τους βρίσκω κατά τη γνώμη μου. Τι λες cherouvim?

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

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από dva_dev » 25 Απρ 2009 02:02

Προσωπικά θεωρώ ότι είναι ένα πολύ ευέλικτο σχήμα που δίνει αρκετές δυνατότητες, αλλά παράλληλα μπορεί να σου βγάλει και την πίστη.
Μια κατηγορία μπορεί πολύ άνετα να μετακινηθεί σε οποιοδήποτε βάθος ώστε να να γίνει υποκατηγορία, αλλά παράλληλα να είναι και υποκατηγορία σε Ν διαφορετικές κατηγορίες (σε διαφορετικό βάθος κάθε φορά).
Ετσι κάποιο άρθρο που έχει συνδεθεί με μια κατηγορία και μία υποκατηγορία να ανήκει ουσιαστικά σε Ν (π.χ. 50) κατηγορίες, αν αυτή η υποκατηγορία έχει συνδεθεί με άλλες υποκατηγορίες (σαν υπο-υποκατηγορία) και κατηγορίες.
Το θέμα είναι όμως έχει σχεδιαστεί η βάση για αυτό το σκοπό ή απλώς έτυχε;

Με λίγα λόγια
Αρθρα inner join ΑρθραΚατηγορίες inner join Κατηγορίες (για να βρείς τις κατηγορίες 1ου επιπέδου)
UNION
Αρθρα inner join ΑρθραΚατηγορίες inner join (με το child) ΚατηγορίεςΥποκατηγορίες inner join (με το parent) Κατηγορίες (για να βρείς κατηγορίες 2ου επιπέδου)
UNION
Αρθρα inner join ΑρθραΚατηγορίες inner join (child) ΚατηγορίεςΥποκατηγορίες (parent) inner join (child) ΚατηγορίεςΥποκατηγορίες (parent) inner join Κατηγορίες (για να βρείς κατηγορίες 3ου επιπέδου)
UNION
...
UNION
Αρθρα inner join ΑρθραΚατηγορίες inner join ΚατηγορίεςΥποκατηγορίες [inner join ΚατηγορίεςΥποκατηγορίες Χ φορές] inner join Κατηγορίες (για να βρείς κατηγορίες (Χ+2)ου επιπέδου)

Δεν είναι ώρα για να δοκιμάζουμε querάκια (Ελπίζω να βγάζει νόημα και να βοηθάει).

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από Akis_gr49 » 25 Απρ 2009 11:17

Δυστυχώς δεν το έπιασα.

Το πρόβλημα μου είναι στην εμφάνιση του ονόματος της κατηγορίας και της υποκατηγορίας για το ίδιο id.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από cherouvim » 25 Απρ 2009 11:36

Σε ενδιαφέρει η εμφάνιση ενός άρθρου τη φορά με τα πλήρη στοιχεία του; Ή θες να τα δείξεις όλα μαζί με τις "υποκατηγορίες" τους;

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από Akis_gr49 » 25 Απρ 2009 11:38

Με ενδιαφέρει όλα μαζί.

Δλδ:

Id κειμένου, όνομα κειμένου, κατηγορία κειμένου, υποκατηγορία κειμένου.

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

Ερώτημα με JOIN για γερούς λύτες

Δημοσίευση από dva_dev » 25 Απρ 2009 14:53

Τελικά οι υποκατηγορίες μέχρι τι επίπεδο φτάνουν;
Μπορεί μια υποκατηγορία να ανήκει σε δύο διαφορετικές κατηγορίες ή μόνο σε μία;
Αν μια κατηγορία δεν έχει parent, υπάρχει σχετική εγγραφή στον πίνακα ypokatigorieskatigories;

Δοκίμασε κάτι τέτοιο αν μπορεί να σε βολέψει:

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

select arthra.content_id, arthra.content_name, katigories.cat_name
from
arthra inner join
(
select content_id aid, cat_id cid
from arthrakatigories

union

select content_id aid, cat_parent_id cid
from arthrakatigories ak
inner join ypokatigorieskatigories yk1 on ak.cat_id=yk1.cat_child_id

union

select content_id aid, yk2.cat_parent_id cid
from arthrakatigories ak
inner join ypokatigorieskatigories yk1 on ak.cat_id=yk1.cat_child_id
inner join ypokatigorieskatigories yk2 on yk1.cat_parent_id = yk2.cat_child_id

union

...

union

select content_id aid, ykN.cat_parent_id cid
from arthrakatigories ak
inner join ypokatigorieskatigories yk1 on ak.cat_id=yk1.cat_child_id
inner join ypokatigorieskatigories yk2 on yk1.cat_parent_id = yk2.cat_child_id
...
inner join ypokatigorieskatigories ykN on yk(N-1).cat_parent_id = ykN.cat_child_id

) TMP

on arthra.content_id = tmp.aid
inner join katigories on tmp.cid = katigories.cat_id
order by arthra.content_id asc, katigories.cat_name asc
Τώρα αν έχει κανά συντακτικό λάθος δεν ξέρω. Δεν έχω πρόχειρη mysql.

Απάντηση

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

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

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