Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Podbranie najnowszych wyników
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
Mam prosty shoutbox, chciałbym pobrać czas najnowszych rekordów w topikach. Postanowiłem zrobić to takim zapytaniem:
  1. $zap3 = "(SELECT timebox, top FROM shoutbox WHERE top=0 ORDER BY top DESC LIMIT 1)
  2. UNION (SELECT top,timebox FROM shoutbox WHERE top=1 ORDER BY top DESC LIMIT 1)
  3. UNION (SELECT top,timebox FROM shoutbox WHERE top=2 ORDER BY top DESC LIMIT 1)
  4. UNION (SELECT top,timebox FROM shoutbox WHERE top=3 ORDER BY top DESC LIMIT 1)
  5. UNION (SELECT top,timebox FROM shoutbox WHERE top=4 ORDER BY top DESC LIMIT 1)
  6. UNION (SELECT top,timebox FROM shoutbox WHERE top=5 ORDER BY top DESC LIMIT 1)";
  7. $idzap3 = mysql_query($zap3);
  8. $ltop = mysql_fetch_row($idzap3);

Zapytanie działa w phpMyAdmin:
Kod
top | timebox
-------------------------
0   | 2010-11-01 14:04:03
1   | 2010-11-13 12:18:38
2   | 2010-11-14 15:56:43

Ale w skrypcie mam tylko jeden rekord... być może dlatego, że nie umiem poradzić sobie z pobraniem i wyświetleniem danych - wynik będzie tablicą wielowymiarową. Próbowałem tak:
  1. foreach ($ltop as $czas=> $top) {
  2. echo $czas.': '.$top.'<br />';
  3. }

Ale mam taki wynik:
Kod
0: 0
1: 2010-11-01 14:04:03

Co robię nie tak?
CuteOne
może użyj GROUP BY? lub sprawdź jak wygląda tablica print_r($ltop);
Kshyhoo
To już robiłem:
  1. print('<pre>');
  2. print_r($ltop);
  3. print('</pre>');

Co daje:
Kod
Array
(
    [0] => 0
    [1] => 2010-11-01 14:04:03
)

Czyli pobieram tylko pierwszą cześć zapytania...
zegarek84
mysql_fetch_array
źle stosujesz:
mysql_fetch_row
jeśli łączysz przez UNION to czy oprócz tego, że wyniki powinny mieć tyle samo kolumn to nie powinny być tego samego typu ;] questionmark.gif

i czemu masz sortowanie DESC questionmark.gif z wyników jakie podałeś, iż oczekujesz chyba wystarczyło by jedno zapytanie w stylu (tutaj chciałeś 6 wyników):
Kod
SELECT top,timebox FROM shoutbox ORDER BY top ASC LIMIT 6

gdzie asc jest domyślne więc wystarczy:
Kod
SELECT top,timebox FROM shoutbox ORDER BY top LIMIT 6
Kshyhoo
@zegarek84, ja nie chcę pobrać 6 ostatnich rekordów, ja chcę pobrać 6 unikalnych rekordów z kolumny "top" (ostatnie wystąpienie wpisu z każdej z 6 topików).
Zrobiłem tak:
  1. $zap3 = "(SELECT timebox, top FROM shoutbox WHERE top=0 ORDER BY top DESC LIMIT 1)
  2. UNION (SELECT top,timebox FROM shoutbox WHERE top=1 ORDER BY top DESC LIMIT 1)
  3. UNION (SELECT top,timebox FROM shoutbox WHERE top=2 ORDER BY top DESC LIMIT 1)
  4. UNION (SELECT top,timebox FROM shoutbox WHERE top=3 ORDER BY top DESC LIMIT 1)
  5. UNION (SELECT top,timebox FROM shoutbox WHERE top=4 ORDER BY top DESC LIMIT 1)
  6. UNION (SELECT top,timebox FROM shoutbox WHERE top=5 ORDER BY top DESC LIMIT 1)";
  7. $idzap3 = mysql_query($zap3);
  8.  
  9.  
  10. if ($idzap3) {
  11. while($dane = mysql_fetch_array($idzap3)) {
  12. $top = trim($dane['top']);
  13. $timebox = trim($dane['timebox']);
  14. if ($top_poprzedni<>strtolower($top)) {
  15. $top_poprzedni = strtolower($top);
  16. }
  17. $t[$top][] = $timebox;
  18. }
  19. }

Teraz kombinuję, jak to wykorzystać - jak odwołać się do rekordów?
zegarek84
skoro już zrobiłeś przepisywanie rekordów do tablicy to akurat u Ciebie odwołanie z tego co widzę do wartości timbox danego topiku wygląda:
$time = $t[$top][0];

proponuje przepisywanie $t[$top] = $timebox;
wtedy odwołanie niżej w kodzie do określonego timebox'a: $t[$top];
Kshyhoo
Już to opanowałem... smile.gif Odwołuję się tak:
  1. if(isset($t[0]) && $lv < $t[0][0]) { ... }

Mam jednak problem z pobraniem najnowszych danych - nie pobiera mi najnowszych! Może napisze jeszcze raz, mam w tabeli:
Kod
timebox                top
2010-11-13 21:20:14    0
2010-11-13 21:23:12    1
2010-11-14 15:56:29    0
2010-11-14 15:56:43    2
2010-11-14 19:26:23    4
2010-11-14 20:33:59    3
2010-11-14 20:44:24    2
2010-11-14 20:46:34    0
2010-11-14 20:47:56    0
2010-11-14 20:48:05    4
2010-11-14 20:55:51    4

Chcę pobrać to:
Kod
timebox                top
2010-11-14 20:47:56    0
2010-11-13 21:23:12    1
2010-11-14 15:56:43    2
2010-11-14 20:33:59    3
2010-11-14 20:55:51    4

Czyli najnowsze wystąpienia w "top".
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.