Επίπεδα ταξινόμησης

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

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

Απάντηση
Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επίπεδα ταξινόμησης

Δημοσίευση από Geotenia » 06 Απρ 2011 13:16

Εχω το παρακάτω query

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

$sql = "SELECT Ergo.Ergo_ID, Stoixeia_Ypopshfioy.`Eponymia/eponymo_Forea`, Metra.Metro, Ergo.Perifereies_NUTS, Aitoymeno_poso, Egkekrimeno_poso, Egkekrimenh_DD, Ax_Ergo_Bathmologhsh.Synolo_gnom\n"
    . "FROM (Metra INNER JOIN ((Stoixeia_Ypopshfioy INNER JOIN Ergo ON Stoixeia_Ypopshfioy.Ependyths_ID = Ergo.Ependyths_ID) INNER JOIN Ax_Ergo_Bathmologhsh ON Ergo.Ergo_ID = Ax_Ergo_Bathmologhsh.Ergo_ID) ON Metra.Metro_ID = Ergo.Metro) INNER JOIN Perifereies_NUTS ON Ergo.Perifereies_NUTS = Perifereies_NUTS.Kod_perif\n"
    . "WHERE Ax_Ergo_Bathmologhsh.Synolo_gnom Is Not Null\n"
    . "GROUP BY Perifereies_NUTS.Perifereia, Metra.Metro ";
Θέλω να του κάνω ταξινόμηση κατά Perifereies_NUTS, μετά κατά Metro και τέλος να εμφανίζει το Synolo_gnom μαζί με το Ergo_ID κατά φθίνουσα σειρά.

Γίνεται αυτό και πως?

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

Επίπεδα ταξινόμησης

Δημοσίευση από Apostolis_38 » 06 Απρ 2011 15:47


Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επίπεδα ταξινόμησης

Δημοσίευση από Geotenia » 06 Απρ 2011 16:35

Δε με κατάλαβες. Στην πυσία θέλω να κάνω κατηγορίες.
Δηλαδή.
Κατηγορία: ΠΕΡΙΦΕΡΕΙΑ 1
Υποκατηγορία: ΜΕΤΡΟ 1
Λίστα έργων με φθίνουσα σειρά βαθμολογίας....

Υποκατηγορία: ΜΕΤΡΟ 2
Λίστα έργων με φθίνουσα σειρά βαθμολογίας....

Κατηγορία: ΠΕΡΙΦΕΡΕΙΑ 2
Υποκατηγορία: ΜΕΤΡΟ 1
Λίστα έργων με φθίνουσα σειρά βαθμολογίας....

Υποκατηγορία: ΜΕΤΡΟ 2
Λίστα έργων με φθίνουσα σειρά βαθμολογίας....

κοκ μέχρι να τελειώσουν οι ΠΕΡΙΦΕΡΕΙΕΣ.

Γίνεται αυτό και πως?

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

Επίπεδα ταξινόμησης

Δημοσίευση από Apostolis_38 » 06 Απρ 2011 17:52

Να σου πω την αλήθεια εγώ αποφεύγω να φτιάχνω τόσο μεγάλα queries γιατί αναπόφευκτα βγαίνουν πολύ μπερδεμένα.
Εγώ θα έκανα το εξής:

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

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

SELECT περιφέρειες, κ.λ.π. κ.λ.π.
while($row...) {
$periferies = $row["περιφέρειες"];

SELECT υποκατηγορία κ.λ.π. κ.λ.π. WHERE περιφέρειες = ".$periferies." 
while($row...) {
$ypokatigoria = $row["υποκατηγορία"];

SELECT λίστα κ.λ.π. κ.λ.π. WHERE υποκατηγορία = ".$ypokatigoria." 
while($row...) {
$lista = $row["λίστα"];
Απλώς θα πρέπει να περικλείεις κάθε select μέσα στο while του προηγούμενου.

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

Επίπεδα ταξινόμησης

Δημοσίευση από dva_dev » 06 Απρ 2011 19:09

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

$sql = "SELECT Ergo.Ergo_ID, Stoixeia_Ypopshfioy.`Eponymia/eponymo_Forea`, Metra.Metro, Ergo.Perifereies_NUTS, Aitoymeno_poso, Egkekrimeno_poso, Egkekrimenh_DD, Ax_Ergo_Bathmologhsh.Synolo_gnom\n"
    . "FROM (Metra INNER JOIN ((Stoixeia_Ypopshfioy INNER JOIN Ergo ON Stoixeia_Ypopshfioy.Ependyths_ID = Ergo.Ependyths_ID) INNER JOIN Ax_Ergo_Bathmologhsh ON Ergo.Ergo_ID = Ax_Ergo_Bathmologhsh.Ergo_ID) ON Metra.Metro_ID = Ergo.Metro) INNER JOIN Perifereies_NUTS ON Ergo.Perifereies_NUTS = Perifereies_NUTS.Kod_perif\n"
    . "WHERE Ax_Ergo_Bathmologhsh.Synolo_gnom Is Not Null\n"
    . "ORDER BY Perifereies_NUTS.Perifereia ASC, Metra.Metro ASC, Ax_Ergo_Bathmologhsh.Synolo_gnom DESC";
Οπως σου ανέφερε πιο πριν και ο Apostolis_38 θέλεις order by. Το group by κάνει άλλη δουλειά, δεν είναι για ταξινόμηση.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Επίπεδα ταξινόμησης

Δημοσίευση από jpk » 06 Απρ 2011 21:07

Αν και πραγματικά δεν ενδείκνυται να κάνεις κάτι τέτοιο όλο μαζί ( αν η βάση δεν το κάνει συχνά οπότε δεν μπορεί να κάνει cashing) πιστεύω ότι έχεις τρείς επιλογές. Να φτιάξεις ένα view , μια stored_procedure ή να καταγράψεις αλγοριθμικά το τι θέλεις σε ένα statement. Πρώτα θέλεις τις μοναδικές «ΠΕΡΙΦΕΡΕΙΑ» πάρε τις με distinct και βάλε τις στο select as κάτι. Μετά θες Υποκατηγορία ανά ΠΕΡΙΦΕΡΕΙΑ εκεί κάνε το join. Και τέλος θέλεις την λίστα έργων που εκεί είναι το ON. Αυτό θα σου φέρει ένα αποτέλεσμα που σε κάθε row θα είναι το έργο και η περιφέρεια και η υποκατηγορία.

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επίπεδα ταξινόμησης

Δημοσίευση από Geotenia » 07 Απρ 2011 09:13

Πιό λογική μου φαίνεται η απάντηση του Apostolis_38.
Το θέμα είναι ΄το η query μου δουλεύει σωστά. Το πρόβλημα είναι τα echo πως θα τα βάλω (σε πίνακα ή σε λίστα δε με απασχολεί ιδιαίτερα...έτσι κι αλλιώς το query τρέχει για να δημιουργεί φύλλο Excel) γιά να βγαίνει σωστά μορφοποιημένος ο πίνακας με τη μορφή που έδειξα παραπάνω.
Εκεί αν μπορεί να βοηθήσει κάποιος θα ήταν όλη η δουλειά μου.

Ευχαριστώ όλους γιά την ασχολία σας και τις απαντήσεις σας.

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

Επίπεδα ταξινόμησης

Δημοσίευση από Apostolis_38 » 07 Απρ 2011 09:58

Ενα ένα μας τα λες :P

Η λογική που σου έγραψα είναι μια απλοποίηση αυτού που ήθελες να κάνεις στο πρώτο σου post. Σπάς το query σε άλλα μικρότερα. Μπορείς να κάνεις και αυτό που προτείνει ο jpk, να κάνεις το αρχικό query και μετά me join τα άλλα δυο. Υπάρχουν αρκετοί τρόποι.
ΟΜΩΣ δεν νομίζω οτι θα σου δουλέψει για data export γιατί πρέπει όλα τα δεδομένα να "βγούν" με τη μια για να έχουν μια ευανάγνωστη μορφή και ταξινόμηση. Αλλιώς θα βγούν μπάχαλο. Και φυσικά στο αρχείο που θα δημιουργηθεί δεν έχεις την δυνατότητα μορφοποίησης κατά το export. Οπως βγούν βγήκαν, ειδικά αν κάνεις export με κάποιο loop κι όχι με select into outfile.
Αν λοιπόν δεν θέλεις να κάθεσαι μετά να "μαγειρεύεις" τα δεδομένα σου στο excel, πιστεύω πως θα ήταν καλύτερα να αποθηκεύεις τις εγγραφές σου σε έναν temporary πίνακα στην μορφή που θέλεις και μετά απο αυτόν να κάνεις το export.

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επίπεδα ταξινόμησης

Δημοσίευση από Geotenia » 07 Απρ 2011 14:33

Και πως μπορώ να το κάνω αυτό? Ηδη τα βγάζω σε HTML πίνακα φορμαρισμένο όπως θέλω χάρη στη βοήθειά σου. Το επόμενο βήμα ποιό μπορεί να είναι?

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επίπεδα ταξινόμησης

Δημοσίευση από Geotenia » 07 Απρ 2011 15:04

Το βρήκα κι αυτό.
Στη κορυφή θέλει

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

header("Content-type: application/vnd.ms-excel"); 
header("Content-Disposition: attachment; filename={$destination}.xls"); 
header("Content-Transfer-Encoding: BINARY");
Το βάζω απλά γιά όποιον ενδιαφέρεται.
Ευχαριστώ πολύ γιά τη βοήθειά σας.

Τελευταία ερώτηση. Πως κάνω το θέμα [SOLVED]?

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

Επίπεδα ταξινόμησης

Δημοσίευση από Apostolis_38 » 07 Απρ 2011 15:13

Πάνω που ετοιμαζόμουν να σου απαντήσω :D

Κάνε edit το αρχικό σου post κα μπροστά από τον τίτλο γράψε [SOLVED]

edit
Και μιας και είναι σχετικό υπάρχει κι αυτό το addon για τον firefox
http://www.outwit.com/
Δεν το έχω δοκιμάσει αλλά το βάζω μήπως ενδιαφέρει κάποιον.

Απάντηση

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

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

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