Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Najnowsze rekordy
Forum PHP.pl > Forum > Bazy danych > MySQL
harryk
Mam tabele:

Kod
id | rodzic_id | nazwa | data


Chce wyświetlić po 5 najnowszych rekordów z tej tabeli, mając danych 3 rodziców (np. o rodzic_id=3, rodzic_id=4, rodzic_id=5).

Dla jednego wiadomo:

  1. SELECT *
  2. FROM tabela
  3. WHERE rodzic_id=3 ORDER BY DATA DESC LIMIT 5


Dla dwóch czy trzech - nie wiem jak to zrobić.. worriedsmiley.gif
dyktek
  1. SELECT *
  2. FROM tabela
  3. WHERE rodzic_id=3 AND rodzic_id = 4 AND rodzic_id = 5
  4. ORDER BY DATA DESC LIMIT 5
harryk
Zupełnie nie o to chodziło... winksmiley.jpg

Chce, zeby to wybrało mi: 5 najnowszych z rodzic_id=3, 5 najnowszych z rodzic_id=4, 5 najnowszych z rodzic_id=5
Vogel
@dyktek: tak jest lepiej:
  1. SELECT *
  2. FROM tabela
  3. WHERE rodzic_id IN (3, 4, 5)
  4. ORDER BY DATA DESC LIMIT 5



@harryk
  1. SELECT *
  2. FROM tabela
  3. WHERE rodzic_id = 3
  4. ORDER BY DATA DESC LIMIT 5
  5. UNION
  6. SELECT *
  7. FROM tabela
  8. WHERE rodzic_id = 4
  9. ORDER BY DATA DESC LIMIT 5
  10. UNION
  11. SELECT *
  12. FROM tabela
  13. WHERE rodzic_id = 5
  14. ORDER BY DATA DESC LIMIT 5
harryk
hmmm.. nie działa.

Czy to moze byc wina wersji mysql? (bodajże 3.23.58)

edit:

Na 4.0.24 też nie działa, wyskakuje błąd:
Kod
#1221 - Wrong usage of UNION and ORDER BY


Kiedy jednak wyrzuce na chwile wszystkie ORDER BY chodzi, ale nieporządanie: pobiera 5 rekordów tylko z pierwszego zapytania.
elessar
tak. union jest dostepne dopiero od wersji 4.
Adiasz
wpiec pozostaje w petelce jechac po rodzic_id i dolanczac wyniki przez array_merge i wyjdzie na to samo
spenalzo
  1. SELECT *
  2. FROM tabela
  3. WHERE rodzic_id IN (3, 4, 5) GROUP BY id%5,rodzic_id ORDER BY DATA


Btw, data to chyba zastrzeżone słowo MySQL, sprawdz w manualu.
Vogel
zastrzeone jest "date" winksmiley.jpg
spenalzo
Okazuje sie, że jednak nie tongue.gif

http://dev.mysql.com/doc/refman/4.1/en/reserved-words.html
na samym dole przed komentarzami winksmiley.jpg
harryk
Wszystko gra, żeby jednak wynieść coś z tej porady może mi ktoś powiedzieć na jakiej zasadzie to działa (podejrzewam, że to zapis GROUP BY id%5,rodzic_id).

edit: Chyba sie za szybko ucieszyłem. Jednak nie działa jak trzeba, nie pobiera najnowszych, a właściwie jakoś tak dość losowo... :/
Yacho
Speniu tez bym prosil o wyjasnienie smile.gif
spenalzo
Tak szczerze? To nie wiem biggrin.gif
Taki sam problem był dwa lata temu na forum poruszany, przypomniałem go sobie, zmodyfikowałem i wrzuciłem winksmiley.jpg A tyle co wiem, to działa on na zasadze modyfikatora w GROUP BY. Jest to ciekawe rozwiązanie problemu, tym bardziej że w manualu nie znalażłem ani słowa o tkim rozwiązaniu smile.gif



Cytat
edit: Chyba sie za szybko ucieszyłem. Jednak nie działa jak trzeba, nie pobiera najnowszych, a właściwie jakoś tak dość losowo... :/

Spróbuj:
  1. ... ORDER BY rodzic_id,id DESC

a jak nadal nie, to wykaż troche inwencji i spróbuj samemu zmodyfikować order by tongue.gif
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.