Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][MySQL] pobieranie rekordów z minimalną ceną z osobnej tabeli
mazyl
post
Post #1





Grupa: Zarejestrowani
Postów: 139
Pomógł: 2
Dołączył: 2.12.2011

Ostrzeżenie: (0%)
-----


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 |
+----+---------+-------+
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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;


Ten post edytował trueblue 26.04.2016, 08:57:25


--------------------
Go to the top of the page
+Quote Post
mazyl
post
Post #3





Grupa: Zarejestrowani
Postów: 139
Pomógł: 2
Dołączył: 2.12.2011

Ostrzeżenie: (0%)
-----


Dzieki bardzo smile.gif działa!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 22:24