Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][SQLite] Pobrać co najmniej 10 rekordów
Forum PHP.pl > Forum > Bazy danych
WebCM
Pola w tabeli artykuły:

ID | Tytuł | Język | Włączony

Czy da się skonstruować zapytanie (dla MySQL 5 oraz SQLite 3), aby pobrać co najmniej 10 najnowszych rekordów (ORDER BY ID DESC) dla każdej innej wartości pola Język? Rekordy muszą spełniać dodatkowo warunek: WHERE `Włączony` = 1

Załóżmy, że istnieją 2 języki: PL i EN. Chcę wyciągnąć listę artykułów, która będzie zawierać 10 po angielsku oraz 10 po polsku. Nie mogę po prostu napisać: LIMIT 20, gdyż równowaga ilości artykułów w poszczególnych językach zostanie zachwiana (np. 5 po angielsku i 15 po polsku).

Jest to w ogóle możliwe Jeśli nie, będę musiał wysyłać więcej zapytań. N = liczba typów * liczba języków.

PS. Polskie znaki są w przykładzie dla ułatwienia. W rzeczywistości stosuję angielskie słowa.
Kicok
UNION
WebCM
Napisałem funkcję: http://www.unit1.pl/pb-897
Przykładowe zapytanie: http://www.unit1.pl/pb-898

Niestety nie osiągnąłem pożądanego rezultatu. Powyższe zapytanie pobiera tylko 5 rekordów. Gdy zamienię 5 na 15, otrzymuję 15 pozycji dowolnego typu (czyli nie 5 x 3). Gdy umieszczę słowo LIMIT w każdej z 3 części zapytania, SQLite wyrzuca błąd, że LIMIT nie może stać przed UNION.

Jeszcze większy problem z sortowaniem. Chcę pobrać 5 najnowszych pozycji dla każdego typu. Zapytanie wyciąga 5 najstarszych. Gdy umieszczę ORDER BY w każdej części, występuje błąd, że ORDER BY nie może stać przed UNION. Gdy umieszczę go tylko w ostatniej części (przed LIMIT), otrzymuję kolejny błąd:
Kod
General error: 1 ORDER BY term number 1 does not match any result column
  1. ORDER BY i.ID DESC
Jeśli z UNION usunę ALL, SQLite sortuje rekordy automatycznie (bez ORDER BY).

A może lepiej nie dzielić listy najnowszych pozycji na typy (artykuły, pliki, zdjęcia), lecz na kategorie, do których należą?
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.