Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][MySQL] pobieranie rekordów z minimalną ceną z osobnej tabeli
Forum PHP.pl > Forum > Przedszkole
mazyl
Witam,

Chciałbym pobrać książki razem z ich najniższą ceną. Udało mi się to uzyskać zapytaniem:

  1. SELECT i.*, s.* FROM books AS i
  2. INNER JOIN prices AS s ON i.id = s.id_book
  3. WHERE s.price = ( SELECT (min) price FROM prices AS z WHERE z.id_book = i.id );


Jednak jest ono wykonywane wolno (około 7s przy ~5000 rekordach). Przy dodanym limicie np. 20 działa szybko, ale im większy damy OFFSET (np. 2000) tym wolniej - 3s. Czy jest jakiś inny sposób żeby uzyskać pożądany przeze mnie efekt? W finalnym zapytaniu pobieram tylko konkretne kolumny - te gwiazdki pobierające wszystko są tylko na potrzeby zadania pytani. Z góry dziękuję za odpowiedzi.

Struktura:

Tabela books
+----+---------+
| id | name |
+----+---------+
| 1 | Test |
| 2 | Testowy |
| 3 | Testuje |
+----+---------+

Tabela prices
+----+---------+-------+
| id | id_book | price |
+----+---------+-------+
| 1 | 1 | 12.00 |
| 2 | 1 | 5.00 |
| 3 | 2 | 8.00 |
| 4 | 2 | 4.00 |
| 5 | 2 | 13.00 |
| 6 | 3 | 19.00 |
+----+---------+-------+
trueblue
Jeśli nie jest Ci potrzebne id ceny:
  1. SELECT b.id,b.name, MIN(p.price) FROM books AS b, prices AS p WHERE b.id= p.id_book GROUP BY b.id;
mazyl
Dzieki bardzo smile.gif działa!
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.