Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Wyświetlenie rekordów
Forum PHP.pl > Forum > Przedszkole
Puzi
Witam,
Mam taki problem. Posiadam w bazie danych tabelę o nazwie 'organizator' a w niej dane:
| id | rodzaj | data | gdzie |
-----------------------------------
| 1 | 1 | 2008-08-15 | krakow |
| 2 | 1 | 2008-08-16 | poznan |
| 3 | 3 | 2008-10-01 | gdansk |
| 4 | 2 | 2008-09-22 | krakow |
| 5 | 2 | 2008-09-26 | krakow |
| 6 | 1 | 2008-08-14 | gdynia |
| 7 | 3 | 2008-10-05 | gdansk |

I chcę wyświetlić rekordy według następujących kryterii:
-najpierw wyszukuje rekordy których data jest przyszłością i sortuje według daty rosnąco
-następnie grupuje je według typu
-i chcę wyświetlić tylko jedną grupę, która jest najwcześniej

Mam do tego taki skrypt:
  1. <?php
  2. $data = date("Y-m-d");
  3.  
  4. $zapytanie = "SELECT * FROM `organizator` WHERE `data` >= '{$data}' GROUP BY `rodzaj` ORDER BY `data` ASC";
  5. $wykonaj = mysql_query($zapytanie);
  6. while($wyswietl = mysql_fetch_row($wykonaj))
  7. {
  8. //wyświetlone dane
  9. }
  10. ?>


I w takim przypadku wyświetla mi wszystkie rekordy.
Jak zrobić, żeby wyświetliło tylko jedną grupę??

Prodszę o pomoc
Pozdrawiam
JoShiMa
  1. SELECT *
  2. FROM `organizator` WHERE `data` >= '{$data}' AND typ=(SELECT typ FROM `organizator` WHERE ...)
  3. GROUP BY `rodzaj` ORDER BY `data` ASC


Tam gdzie trzy kropki musisz dać odpowiedni warunek, bo nie wiem co to znaczy 'najwcześniej'
Puzi
Najwcześniej czyli wyświetlić tą grupę, która będzie wykonana jako pierwsza patrząc na datę.

Zrobiłem takie zapytanie:
  1. SELECT * FROM `organizator` WHERE `data` >= '{$data}' AND typ=(SELECT typ FROM `organizator` WHERE `data` > '{$data}') GROUP BY `rodzaj` ORDER BY `data` ASC


i nie działa
Wywala błąd
Cytat
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in


Może inaczej napiszę:
Chcę wyświetlić grupę rekordów według kolumny 'rodzaj' która będzie pierwsza wykonana patrząc na datę.
Kicok
  1. SELECT *
  2. FROM( SELECT * FROM `organizator` WHERE `data` >= '{$data}' ORDER BY `data` ASC ) `organizator`
  3. GROUP BY `rodzaj`
Puzi
Terz nie ma błędu ale wyświetla po jednym rekordzie z każdego rodzaju... a ja chcę wyświetlić jedną całą grupę
JoShiMa
A jesteś perien, że to zapytanie:
  1. SELECT typ FROM `organizator` WHERE `data` > '{$data}'

Zwraca Ci dokładnie jeden rekord najbliższego wydarzenia? Bo ja jestem pewna, że nie.
Kicok
Cytat
Terz nie ma błędu ale wyświetla po jednym rekordzie z każdego rodzaju... a ja chcę wyświetlić jedną całą grupę

Napisałeś: "-następnie grupuje je według typu", a w MySQL GROUP BY `rodzaj` ma nieco inne działanie niż ty chciałbyś uzyskać ;]

Sprawdź to:
  1. SELECT *
  2. FROM `organizator` WHERE `rodzaj` = ( SELECT `rodzaj` FROM `organizator` WHERE `data` >= '{$data}' ORDER BY `data` ASC LIMIT 1 ) AND `data` >= '{$data}'
  3. ORDER BY `data` ASC
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.