sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

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

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

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Akis_gr49 » 03 Μαρ 2011 12:41

Γεια σας παιδιά

έχω έναν πίνακα:
tv_program
id
name
date
channel

Θέλω να ταξινομήσω τα προγράμματα με βάση την ημέρα:
Για παράδειγμα:

Ενώ τα αποτελέσματα από το query μου εμφανίζονται σωστά έτσι:

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

18:00 == ΑΕΚ - Παοκ == NovaSports1
19:00 == Ειδήσεις σε 1' == Mega
23:00 == Ράδιο Αρβύλα == Ant1
18:00 == ΑΕΚ - Παοκ == NovaSports1
19:00 == Ειδήσεις σε 1' == Mega
23:00 == Ράδιο Αρβύλα == Ant1
18:00 == ΑΕΚ - Παοκ == NovaSports1
19:00 == Ειδήσεις σε 1' == Mega
23:00 == Ράδιο Αρβύλα == Ant1
θέλω να τα εμφανίσω ταξινομημένα με βάση την ημέρα:

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

ΔΕΥΤΕΡΑ
18:00 == ΑΕΚ - Παοκ == NovaSports1
19:00 == Ειδήσεις σε 1' == Mega
23:00 == Ράδιο Αρβύλα == Ant1

ΤΡΙΤΗ
18:00 == ΑΕΚ - Παοκ == NovaSports1
19:00 == Ειδήσεις σε 1' == Mega
23:00 == Ράδιο Αρβύλα == Ant1

ΤΕΤΑΡΤΗ
18:00 == ΑΕΚ - Παοκ == NovaSports1
19:00 == Ειδήσεις σε 1' == Mega
23:00 == Ράδιο Αρβύλα == Ant1
Αυτό που έχω κάνει μέχρι στιγμής είναι δυο ερωτήματα:
Το ένα τραβάει τις ημέρες και το άλλο τις εγγραφές και με μια For τα εμφανίζω. Αλλά σίγουρα υπάρχει λύση για να μπουν σε ένα query.

Δείτε το 1 ερώτημα των αποτελεσμάτων:

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

$query = "SELECT id, name, date, channel, DATE_FORMAT(date,'%d') AS day_name "
."FROM tv_program "
."WHERE id > 0 "
."GROUP BY day_name "
."ORDER BY date DESC "
;
Οποιαδήποτε βοήθεια ευπρόσδεκτη.
Ευχαριστώ εκ των προτέρων.

Άβαταρ μέλους
kostasxx
Δημοσιεύσεις: 56
Εγγραφή: 08 Δεκ 2010 21:56
Τοποθεσία: Αθήνα
Επικοινωνία:

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από kostasxx » 03 Μαρ 2011 13:18

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

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

$result = mysql_query($query);
if ($row = mysql_fetch_array($result)) {
    //Εμφανίζεις τη πρώτη μέρα και την αποθηκεύεις στη $last_day
    $last_day = $row['day_name'];
    echo $last_day . '<br />';
    do &#123;
          //Ελέγχεις εάν η τελευταία μέρα είναι διαφορετική από τη μέρα στη $row και την εμφανίζεις και τη καταχωρείς στη $last_day
          if &#40;$last_day != $row&#91;'day_name'&#93;&#41; &#123;
               $last_day = $row&#91;'day_name'&#93;;
               echo $last_day . '<br />';
          &#125;
          //Και μετά εμφανίζεις τη σειρά
          print_r&#40;$row&#41;;
     &#125;while&#40;$row = mysql_fetch_array&#40;$result&#41;;
&#125;
Αν δε κοιτάς εκέι που θες να πας... Θα πας εκεί που κοιτάς. Όταν μου το έλεγαν εγώ κοίταγα το ντουβάρι.
Web Design
http://www.stockatzidiko.gr / http://www.islandzakynthos.com/bookit

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Akis_gr49 » 03 Μαρ 2011 13:41

Κώστα σ' ευχαριστώ πολύ, θα το δοκιμάσω και θα επανέλθω. Να 'σαι καλά.

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από dva_dev » 03 Μαρ 2011 16:02

Αυτά που εμφανίζεις είναι υποχρεωτικά σε διάστημα 1 εβδομάδας μόνο ή μπορεί να είναι και μεγαλύτερο;

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Akis_gr49 » 03 Μαρ 2011 16:15

Είναι και μεγαλύτερο.

Με δυσκολεύει λίγο η do while που αναφέρει ο Κώστας μιας και δεν την χρησιμοποιώ ποτέ.

Στην php δεν χρησιμοποιείται συχνά σωστά;

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από korgr » 03 Μαρ 2011 16:29

Γιατί σε μπερδεύει?
Αν το γράψεις έτσι σου φαίνεται καλύτερα?

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

$result = mysql_query&#40;$query&#41;;
if &#40;$row = mysql_fetch_array&#40;$result&#41;&#41; &#123;
    //Εμφανίζεις τη πρώτη μέρα και την αποθηκεύεις στη $last_day
    $last_day = $row&#91;'day_name'&#93;;
    echo $last_day . '<br />';
    while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41;&#123;
          //Ελέγχεις εάν η τελευταία μέρα είναι διαφορετική από τη μέρα στη $row και την εμφανίζεις και τη καταχωρείς στη $last_day
          if &#40;$last_day != $row&#91;'day_name'&#93;&#41; &#123;
               $last_day = $row&#91;'day_name'&#93;;
               echo $last_day . '<br />';
          &#125;
          //Και μετά εμφανίζεις τη σειρά
          print_r&#40;$row&#41;;
     &#125;
&#125;

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Akis_gr49 » 03 Μαρ 2011 19:14

Παιδιά ευχαριστώ για τις απαντήσεις σας.

Εν μέρη δουλεύει, αλλά μόνο για τα συνεχόμενα ids.

Πιο συγκεκριμένα, δείτε ένα αποτέλεσμα που βγάζει:

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

3 imera
test 2
4 imera
test 3
7 imera
test 4
test 5
4 imera
TEST 6
8 imera
TEST 7
ενώ έπρεπε να είναι έτσι:

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

3 imera
test 2
4 imera
test 3
TEST 6
7 imera
test 4
test 5
8 imera
TEST 7
Δηλαδή την 4 ημέρα έπρεπε να την εμφανίζει μια φορά με τα αποτελέσματα test3, και TEST 6.

Διακρίνετε κάπου λάθος;

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από dva_dev » 03 Μαρ 2011 20:18

Ακυρο.
Δείξε μας τι περιέχουν οι εγγραφές στον πίνακα για να μπορέσουμε να σου πούμε τι είναι λάθος και που.

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Akis_gr49 » 03 Μαρ 2011 22:01

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

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

<?php
mysql_connect&#40;"localhost", "root", ""&#41; or die&#40;mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;"testdb"&#41; or die&#40;mysql_error&#40;&#41;&#41;;

$query = "SELECT DAY&#40;date&#41; AS day, DATE_FORMAT&#40;date,'%M'&#41; AS month, name, channel FROM tv_program";
$result = mysql_query&#40;$query&#41;; 

if &#40;$row = mysql_fetch_array&#40;$result&#41;&#41; &#123; 
	$date = $row&#91;'month'&#93;;
	echo '<h2>'.$date.'</h2>'; 
	
	while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41;&#123;
		if &#40;$date != $row&#91;'month'&#93;&#41; &#123; 
			$date = $row&#91;'month'&#93;; 
			echo '<h2>'.$date.'</h2>'; 
		&#125;
		echo '<strong>'.$row&#91;'day'&#93;.' '.$row&#91;'month'&#93;.'</strong>&#58; '.$row&#91;'name'&#93;.'<br />';
	&#125;
&#125;
?>
Δεν θα έπρεπε τα αποτελέσματα:

21 April: LIFESTYLE και
25 April: The Good Wife

να τα εμφανίζει κάτω από ένα April ;

Ευχαριστώ για την βοήθεια.
Συνημμένα
data_localhost.png

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από dva_dev » 04 Μαρ 2011 03:57

Σου λείπει το order by οπότε τα φέρνει με βάση το id (primary key).

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

$query = "SELECT DAY&#40;date&#41; AS day, DATE_FORMAT&#40;date,'%M'&#41; AS month, name, channel FROM tv_program ORDER by date";

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Akis_gr49 » 04 Μαρ 2011 03:59

Θα με τρελάνεις dva_dev!! :)

Αυτό ήταν, σε υπερευχαριστώ, και τα υπόλοιπα παιδιά που βοήθησαν. Να 'στε καλά.

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Akis_gr49 » 04 Μαρ 2011 05:05

Perfect! Το αποτέλεσμα είναι αυτό που θέλαμε. Αν το κάνουμε λίγο περίπλοκο ακόμη; Π.χ. προσπάθησα να βάλω ordered Lists για να πετύχω το παρακάτω αποτέλεσμα, αλλά δεν βγαίνει σωστά. Επίσης στο ίδιο query θα μπορούσαμε να εμφανίσουμε το άθροισμα των εγγραφών για κάθε μήνα ξεχωριστά; π.χ. March = 1, April = 2 etc;

Επιθυμητό αποτέλεσμα:

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

March
5 March&#58; Deal

April
21 April&#58; LIFESTYLE
25 April&#58; The Good Wife

July
5 July&#58; America's Next top model
12 July&#58; Telemarketing

August
24 August&#58; Lost

Νέο επιθυμητό αποτέλεσμα:

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

March=1
1. 5 March&#58; Deal

April=2
1. 21 April&#58; LIFESTYLE
2. 25 April&#58; The Good Wife

July=2
1. 5 July&#58; America's Next top model
2. 12 July&#58; Telemarketing

August=1
1. 24 August&#58; Lost
Προσπάθησα και το παρακάτω αποτέλεσμα, το πιο λογικό δηλαδή από τις δοκιμές που έκανα. Δείτε το στην εικόνα που επισυνάπτω.

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

<?php
mysql_connect&#40;"localhost", "root", ""&#41; or die&#40;mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;"testdb"&#41; or die&#40;mysql_error&#40;&#41;&#41;;

$query = "SELECT DAY&#40;date&#41; AS day, DATE_FORMAT&#40;date,'%M'&#41; AS month, name, channel FROM tv_program ORDER BY date";
$result = mysql_query&#40;$query&#41;; 

if &#40;$row = mysql_fetch_array&#40;$result&#41;&#41; &#123; 
	$date = $row&#91;'month'&#93;;
	echo '<h2>'.$date.'</h2>'; 
	
	while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41;&#123;
		if &#40;$date != $row&#91;'month'&#93;&#41; &#123; 
			$date = $row&#91;'month'&#93;; 
			echo '<h2>'.$date.'</h2>'; 
			echo '<ol>';
		&#125;
		
		echo '<li><strong>'.$row&#91;'day'&#93;.' '.$row&#91;'month'&#93;.'</strong>&#58; '.$row&#91;'name'&#93;.'</li><br />';
		
	&#125;
	
&#125;

?>
Συνημμένα
query2.png
(10.46 KiB) Μεταφορτώθηκε 270 φορές

Άβαταρ μέλους
kostasxx
Δημοσιεύσεις: 56
Εγγραφή: 08 Δεκ 2010 21:56
Τοποθεσία: Αθήνα
Επικοινωνία:

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από kostasxx » 04 Μαρ 2011 09:07

Μια μικρή διόρθωση (τρείς για την ακρίβεια :-)) και είσαι έτοιμος.
Akis_gr49 έγραψε: Προσπάθησα και το παρακάτω αποτέλεσμα, το πιο λογικό δηλαδή από τις δοκιμές που έκανα. Δείτε το στην εικόνα που επισυνάπτω.
<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("testdb") or die(mysql_error());

$query = "SELECT DAY(date) AS day, DATE_FORMAT(date,'%M') AS month, name, channel FROM tv_program ORDER BY date";
$result = mysql_query($query);

if ($row = mysql_fetch_array($result)) {
$date = $row['month'];
echo '<h2>'.$date.'</h2>';
echo '<ol>';

while($row = mysql_fetch_array($result)){
if ($date != $row['month']) {
$date = $row['month'];
echo '</ol>';
echo '<h2>'.$date.'</h2>';
echo '<ol>';
}

echo '<li><strong>'.$row['day'].' '.$row['month'].'</strong>: '.$row['name'].'</li><br />';

}
echo '</ol>';

}

?>
Αν δε κοιτάς εκέι που θες να πας... Θα πας εκεί που κοιτάς. Όταν μου το έλεγαν εγώ κοίταγα το ντουβάρι.
Web Design
http://www.stockatzidiko.gr / http://www.islandzakynthos.com/bookit

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Akis_gr49 » 04 Μαρ 2011 12:01

Κωστή μπράβο φίλε, σ' ευχαριστώ. Κάπου τα μπέρδεψα με τα ol.
Super δουλεύει σωστά τώρα, και όταν βάλουμε το πρώτο echo '<ol>'; πάνω από το πρώτο echo '<h2>'.$date.'</h2>'; ταξινομεί σωστά και τον πρώτο μήνα.

Επίσης στο ίδιο query θα μπορούσαμε να εμφανίσουμε το άθροισμα των εγγραφών για κάθε μήνα ξεχωριστά;

δηλαδή έτσι;

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

&#91;b&#93;March=1 &#91;/b&#93;
1. 5 March&#58; Deal 

&#91;b&#93;April=2 &#91;/b&#93;
1. 21 April&#58; LIFESTYLE 
2. 25 April&#58; The Good Wife 

&#91;b&#93;July=2 &#91;/b&#93;
1. 5 July&#58; America's Next top model 
2. 12 July&#58; Telemarketing 

&#91;b&#93;August=1 &#91;/b&#93;
1. 24 August&#58; Lost 
Δοκίμασα να βάλω κάποιον counter πριν και μετά την while αλλά τίποτα. Μήπως πρέπει να μπει μέσα στο query κατευθείαν;

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

sql περίπλοκο ερώτημα ταξινόμησης με βάση την ημέρα

Δημοσίευση από Apostolis_38 » 04 Μαρ 2011 13:34

Για δοκίμασε κάτι τέτοιο:

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

$number = 1;
while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41;&#123; 
μπλά μπλά 
echo '<li><strong>'.$number.".&nbsp;".$row&#91;'day'&#93;.' '.$row&#91;'month'&#93;.'</strong>&#58; '.$row&#91;'name'&#93;.'</li><br />';
μπλά μπλά

$number++;
&#125;

Απάντηση

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

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

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