Sql Order by Date help

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

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

Απάντηση
sdem
Δημοσιεύσεις: 21
Εγγραφή: 14 Απρ 2010 19:06

Sql Order by Date help

Δημοσίευση από sdem » 27 Απρ 2010 23:10

Καλησπέρα,
έχω μία εργασία και έχω φάει ένα κόλλημα.

Εχουμε:

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

ekdotis (id, xarakt_ekdoti)
efhmerida (id,ekdotis_id,eksofilo_ef,hmera, mhnas, xronos)
Το ερώτημα είναι "Εμφανίστε μόνο το τελευταίο εξώφυλλο χρονολογικά της εφημερίδας του εκδότη που έχει χαρακτηρισμό 1 και όλα τα αποτελέσματα να είναι χρονολογικά)

Αυτό που εχω καταφέρει να κάνω είναι να εμφανίζω χρονολογικά το σύνολο

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

SELECT * 
  FROM efhmerida, ekdotis 
 WHERE efhmerida.ekdotis_id=ekdotis.id AND xarakt_ekdoti = 1	
 GROUP BY ekdotis
			 ORDER BY efhmerida.xronos DESC, efhmerida.mhnas DESC,efhmerida.hmera DESC,efhmerida.id DESC
			 LIMIT $offset, $rowsPerPage //χρειάζεται για το paging


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

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

1) 27/8/2009  χχ1.jpg
2) 10/3/2010  χχ2.jpg
3) 05/2/2009  χχ3.jpg
Πως μπορώ να κάνω ένα δεύτερο Order by date μεσα στο select?

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Sql Order by Date help

Δημοσίευση από Banavas » 28 Απρ 2010 00:07

sdem έγραψε:Καλησπέρα,
έχω μία εργασία και έχω φάει ένα κόλλημα.

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

SELECT * 
  FROM efhmerida, ekdotis 
 WHERE efhmerida.ekdotis_id=ekdotis.id AND xarakt_ekdoti = 1	
 GROUP BY ekdotis
			 ORDER BY efhmerida.xronos DESC, efhmerida.mhnas DESC,efhmerida.hmera DESC,efhmerida.id DESC
			 LIMIT $offset, $rowsPerPage //χρειάζεται για το paging
Αντί για LIMIT $offset, $rowsPerPage (εδώ δεν χρειάζεσαι pagination αφού θέλεις μόνο ένα αποτέλεσμα) βάλε LIMIT 1 ώστε να πάρεις μόνο ένα αποτέλεσμα και επειδή τα έχεις sortάρει κατά ημερομηνία αντίστροφα δεν χρειάζεται να κάνεις τίποτε άλλο.
sdem έγραψε:Πως μπορώ να κάνω ένα δεύτερο Order by date μεσα στο select?
Δεν μπορείς να κάνεις δυο διαφορετικά σορταρίσματα ταυτόχρονα, θα πρέπει να διαλέξεις ποιο είναι το πρωτεύον πεδίο με βάση το οποίο θα γίνει το σορτάρισμα και αν θέλεις προσθέτεις δευτερεύον πεδίο κοκ. Το δευτερεύον πεδίο θα χρησιμοποιηθεί όπου το πρωτεύον πεδίο είναι ίδιο οπότε όλες οι εγγραφές που έχουν ίδιο πρωτεύον πεδίο σορταρίσματος θα πάρουν σειρά κατάταξης από το δευτερέυον πεδίο.
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Sql Order by Date help

Δημοσίευση από fafos » 28 Απρ 2010 00:31

piois kathighths edose thn hmeromhnia se diaforetika pedia sthn vash? (hmera, mhnas, xronos)

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Sql Order by Date help

Δημοσίευση από Banavas » 28 Απρ 2010 08:54

fafos έγραψε:piois kathighths edose thn hmeromhnia se diaforetika pedia sthn vash? (hmera, mhnas, xronos)
To "ανορθόδοξο" της ημερομηνίας δεν το σχολίασα γιατί είναι άσκηση και γενικότερα στις ασκήσεις επιτρέπονται ατασθαλίες προς χάριν εκπαίδευσης (πχ της ORDER BY) ή γιατί δεν έχουν διδαχθεί κάποια πράγματα.

Εννοείται οτι σε παραγωγικό site είναι απαράδεκτος ο τρόπος με την ημερομηνία.
Happy coding....
Μάρκος
http://lasernet.gr

sdem
Δημοσιεύσεις: 21
Εγγραφή: 14 Απρ 2010 19:06

Sql Order by Date help

Δημοσίευση από sdem » 28 Απρ 2010 13:18

Δεν αναφερθήκε πουθενα οτι την βαση την εφτιαξε καθηγητης και δεν ειναι αυτο το θεμα μας. Ευχαριστώ για τις απαντησεις. Το θεμα ειναι οτι δεν ειναι ενα αποτελεσμα για να βαλω limit 1. Απο ολους τους εκδοτες εμφανιζει την μονο την τελευταία τους χρονολογικα εφημεριδα αλλα και ολα τα αποτελεσμα να τα εμφανιζει χρονολογικα.

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

Sql Order by Date help

Δημοσίευση από dva_dev » 28 Απρ 2010 14:28

Πάρε κάτι να ξεκολλήσεις

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

SELECT MAX(DATE(CONCAT_WS('-',`xronos`,`mhnas`,`hmera`))) calcDate, ekdotis_id
FROM efhmerida, ekdotis
WHERE efhmerida.ekdotis_id=ekdotis.id AND xarakt_ekdoti = 1
GROUP BY ekdotis_id
Δεν πρέπει να είναι δύσκολο από εδώ και κάτω, αλλά πρέπει να το παιδέψεις ακόμα.

sdem
Δημοσιεύσεις: 21
Εγγραφή: 14 Απρ 2010 19:06

Sql Order by Date help

Δημοσίευση από sdem » 28 Απρ 2010 18:02

Ευχαριστώ πολύ για την απάντηση σου, είναι πολύ χρήσιμη.

Έχω φτάσει στο να κάνω:

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

  SELECT MAX(DATE(CONCAT_WS('-',`xronos`,`mhnas`,`hmera`))) calcDate, efhmerida.ekdotis_id, efhmerida.id,  efhmerida.hmera, efhmerida.mhnas, efhmerida.xronos, efhmerida.eksofilo_ef 
FROM ekdotis
 INNER JOIN  `efhmerida` ON ekdotis.id = efhmerida.ekdotis_id
AND ekdotis.xarakt_ekdoti = 1
GROUP BY ekdotis_id 
 ORDER BY calcDate DESC
αλλά έχω μία απορία ενώ οι ημερομηνίες είναι σωστές και ακόμα και η ταξινόμηση είναι χρονολογικά σωστή στην βάση φαίνονται:
calcDate.........ekdotis_id.....hmera....mhnas.....xronos...........eksofilo_ef
2010-03-31............51...........3 ...........11...........2009...........2009_3_11_06.jpg
2010-03-24............29 ..........21 ..........9 ...........2009...........2009_21_9_11-32.jpg
2010-03-23............22 ..........27...........8............2009...........90.jpg
2009-12-24............36...........11 .........10...........2009...........2009_8_10_07-39-55.jpg
2009-10-04............5.............5 ...........7............2009...........2009_6_7_08-02-04_8-7-09.jpg

δηλ. το calcDate δεν συμπίπτει με το hmera mhnas xronos για να καλέσω το συγκεκριμένο εξώφυλλο. Σκέφτηκα να κάνω κάτι του στιλ

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

WHERE ekdotis.id=efhmerida.ekdotis_id
AND ekdotis.xarakt_ekdoti = 1
 AND calcDate=`efhmerida.hmera, efhmerida.mhnas, efhmerida.xronos`
αλλά δεν νομίζω να είναι σωστό.
Έχω πάρει λάθος δρόμο?

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

Sql Order by Date help

Δημοσίευση από dva_dev » 28 Απρ 2010 18:55

NAI

[edit]
Επειδή το ναι είναι μάλλον πολύ λίγο, κοίτα το query που σου έδωσα τι επιστρέφει. Αν δεν ήταν query, και ήταν table (φτιάξε για να κάνεις δοκιμές ένα table π.χ. mynewtable με αυτά τα δεδομένα που επιστρέφει το query), πως θα το χρησιμοποιούσες;

Εχεις στον πινακα efhmerida τρία πεδία που είναι σπασμένα κομμάτια απο ημερομηνία. Ετσι δεν αξίζουν τίποτα και δεν μπορούν να χρησιμοποιηθούν πουθένα. Πρέπει να τα κάνεις ημερομηνία για να τα αξιοποιήσεις, και να συνδιάσεις τον πινακα efhmerida με τον mynewtable.
Οταν τελικά παίξει έτσι, αντικατέστησε τον πίνακα mynewtable με το query που σου έδωσα.
[/edit]

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Sql Order by Date help

Δημοσίευση από fafos » 28 Απρ 2010 20:03

dva_dev ... den einai auto to thema mas... :lol:

sdem
Δημοσιεύσεις: 21
Εγγραφή: 14 Απρ 2010 19:06

Sql Order by Date help

Δημοσίευση από sdem » 28 Απρ 2010 20:20

fafos έγραψε:dva_dev ... den einai auto to thema mas... :lol:
Το "δεν είναι αυτό θέμα μας" πήγαινε στο "δεν μας αφορά αν το έκανε καθηγητής" και όχι στον τρόπο που πρέπει να χρησιμοποιήσεις την ημερομηνία στο table.
Αν θέλεις μπορείς να κάνεις την παρατήρηση σου σε ότι αφορά το post .
Μην χάνεις τον χρόνο σου με άσκοπες πληροφορίες.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Sql Order by Date help

Δημοσίευση από fafos » 28 Απρ 2010 20:29

sdem έγραψε:
fafos έγραψε:dva_dev ... den einai auto to thema mas... :lol:
Το "δεν είναι αυτό θέμα μας" πήγαινε στο "δεν μας αφορά αν το έκανε καθηγητής" και όχι στον τρόπο που πρέπει να χρησιμοποιήσεις την ημερομηνία στο table.
Αν θέλεις μπορείς να κάνεις την παρατήρηση σου σε ότι αφορά το post .
Μην χάνεις τον χρόνο σου με άσκοπες πληροφορίες.
ektos apo asxetos eisai kai thrasys.. phgaine mathe pos douleuei h php kai h mysql kai meta kane analysh ths vashs sou...

sdem
Δημοσιεύσεις: 21
Εγγραφή: 14 Απρ 2010 19:06

Sql Order by Date help

Δημοσίευση από sdem » 28 Απρ 2010 21:30

fafos έγραψε:
sdem έγραψε:
fafos έγραψε:dva_dev ... den einai auto to thema mas... :lol:
Το "δεν είναι αυτό θέμα μας" πήγαινε στο "δεν μας αφορά αν το έκανε καθηγητής" και όχι στον τρόπο που πρέπει να χρησιμοποιήσεις την ημερομηνία στο table.
Αν θέλεις μπορείς να κάνεις την παρατήρηση σου σε ότι αφορά το post .
Μην χάνεις τον χρόνο σου με άσκοπες πληροφορίες.
ektos apo asxetos eisai kai thrasys.. phgaine mathe pos douleuei h php kai h mysql kai meta kane analysh ths vashs sou...
Δεν χάνω τον χρόνο μου να ασχοληθώ μαζί σου.
Άσχετος δεν είναι αυτός που ρωτάει άσχετος είναι αυτός που τα νομίζει ότι τα ξέρει όλα.

sdem
Δημοσιεύσεις: 21
Εγγραφή: 14 Απρ 2010 19:06

Sql Order by Date help

Δημοσίευση από sdem » 29 Απρ 2010 02:47

Έχω προχωρήσει ένα βήμα,

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

 SELECT  efhmerida.ekdotis_id, efhmerida.id, 
 efhmerida.eksofilo_ef,hmerominia
 FROM efhmerida, ekdotis
 WHERE efhmerida.ekdotis_id=ekdotis.id 
 AND ekdotis.xarakt_ekdoti = 1 
 AND hmerominia =(SELECT max(hmerominia) FROM efhmerida,ekdotis  WHERE efhmerida.ekdotis_id=ekdotis.id 
 AND ekdotis.xarakt_ekdoti = 1 )
GROUP BY ekdotis_id
ORDER BY hmerominia
Μου κάνει και συγκεντρωτική ταξινόμηση καθώς και βάση της εφημερίδας άλλα κάτι δεν μου πάει καλά με το group, μου εμφανίζει μόνο ένα αποτέλεσμα.
Κάπου δεν πρέπει να το έχω εφαρμόσει σωστά.
Καμιά ιδέα?

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Sql Order by Date help

Δημοσίευση από korgr » 29 Απρ 2010 10:03

sdem έγραψε: Άσχετος δεν είναι αυτός που ρωτάει άσχετος είναι αυτός που τα νομίζει ότι τα ξέρει όλα.
Οχι φιλε μου
Ασχετος ειναι αυτος που ρωταει. Απλα δεν ειναι κακο που ειναι ασχετος. Ολοι απο ασχετοι ξεκινησαμε.
Αν βρεις εστω και εναν απο τους καλυτερους καθηγητες σου, να αξιζει το 1/10 του fafos θα εχεις κανει την ανακαλυψη του αιωνα!

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

Sql Order by Date help

Δημοσίευση από dva_dev » 29 Απρ 2010 10:24

fafos έγραψε:dva_dev ... den einai auto to thema mas... :lol:
Ας πάμε λοιπόν στο θέμα μας :D

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

SELECT calcDate, eksofilo_ef
FROM efhmerida INNER JOIN
(
       SELECT MAX(DATE(CONCAT_WS('-',`xronos`,`mhnas`,`hmera`))) calcDate, ekdotis_id
       FROM efhmerida, ekdotis
       WHERE efhmerida.ekdotis_id=ekdotis.id AND xarakt_ekdoti = 1
       GROUP BY ekdotis_id
) tmp ON (calcDate = DATE(CONCAT_WS('-',`xronos`,`mhnas`,`hmera`))
          AND tmp.ekdotis_id = efhmerida.ekdotis_id)
ORDER BY calcDate DESC

Απάντηση

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

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

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