Skocz do zawartości

Kilka zapytań w jednym


korpirkor

Rekomendowane odpowiedzi

Witam !

Załóżmy, że mam taką tabelkę:

przedmioty:

id | item_name | item_category_id | auction_end_time

a w tej tabelce jest cała masa wpisów.

Chciałbym wyciągnąć po 5 przedmiotów z każdej kategorii (id-y kategorii są stałe: 1,2,3,4), sortując po auction_end_time

Czy jest to możliwe za pomocą jednego zapytania, nie pobierając zawartości całej tabelki ?

Jeżeli jest możliwe to jak to zrobić ?

Jeżeli nie - jak to zrobić najbardziej optymalnie ?

Dzięki i pozdrawiam !

Odnośnik do komentarza
Udostępnij na innych stronach

Dawno tego nie robiłem i dokładnie nie pamiętam, ale spróbuj najpierw posortować tak jak napisałeś, a później dołożyć klauzulę ORDER BY item_category_id lub GROUP BY item_category_id.

Mam nadzieję że pomoże.

Pozdrawiam

katalog sklepów - darmowy katalog PR4 porady, artykuły, produkty.

Atrakcje turystyczne - wyjade.pl

Odnośnik do komentarza
Udostępnij na innych stronach

GROUP BY stosowane jest przy sumowaniu, wiec to odpada.

Z doświadczenia wiem, że szybciej jest wykonać kilka małych zapytań niż jedno złożone - dlatego użył bym pętli php

$result = mysql_query("SELECT DISTINCT item_category_id FROM nazwa_tabeli ORDER BY item_category_id");
while($row = mysql_fetch_array($result))
{
$result2 = mysql_query("SELECT * FROM nazwa_tabeli WHERE item_category_id = '$row[item_category_id]' ORDER BY auction_end_time");
}

Odnośnik do komentarza
Udostępnij na innych stronach

nie wiem czy o to ci chodziło, ale możesz użyć IN:

wyrażenie [Not] IN (wartość1, wartość2,...)

pierwszy wynik z google: sql in

SELECT * FROM nazwa_tabeli WHERE item_category_id IN (1, 2, 3, 4, 5) ORDER BY auction_end_time

żeby otrzymać wynik który wsadzisz w nawiasy IN() (czyli z przecinkiem) najlepiej użyć funkcji php implode(', ', $kategorie)

Odnośnik do komentarza
Udostępnij na innych stronach

nie wiem czy o to ci chodziło, ale możesz użyć IN:

wyrażenie [Not] IN (wartość1, wartość2,...)

pierwszy wynik z google: sql in

SELECT * FROM nazwa_tabeli WHERE item_category_id IN (1, 2, 3, 4, 5) ORDER BY auction_end_time

żeby otrzymać wynik który wsadzisz w nawiasy IN() (czyli z przecinkiem) najlepiej użyć funkcji php implode(', ', $kategorie)

Nie wyciągniesz w ten sposób po 5 z każdej grupy, tylko wszystkie.

Stars podał najlepsze rozwiązanie, dodając do zapytania LIMIT 5 wyciągniesz tyle i potrzebujesz.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności