TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
zadanie dla masterów SQL - jak najefektywniej zrobić takie zapytanie? , kubazzz 7/05/09 19:45 mamy tabelę
id | title | text | category | date
chcę wybrać:
wszystkie dane [cały wiersz - id, title, text ... ] dla najnowszego wpisu, po jednym dla każdej kategorii, posortowane wg kategorii rosnąco.
czyli żebym dostał w wyniku najnowszy wpis dla kategorii 1, 2, 3 i ile ich tam będzie.
Da się to zrobić w jednym zapytaniu?SM-S908 - sprawdz , Deus ex machine 7/05/09 19:49
select distinct category, id, title, date from tabela group by category order by category, date asc;
moze zadziala"Uti non Abuti" - prawie , kubazzz 7/05/09 19:58
ale nie wybiera najnowszychSM-S908
- moze tak , gorii 7/05/09 20:37
select tb1.id, tb1.title, tb1.text, tb1.category, tb1.date
from tabela tb1
where tb1.date = ( select max(tb2.date) from tabela tb2 where tb1.category = tb2.category )- albo tak , bwana 7/05/09 22:51
select a.* from
tb1 a,
(select tb1.category, max(tb1.date) from tb1) b
where a.category=b.category and a.date=b.date
podobnie jak w przypadku selekta podanego przez gorii nie gwarantuje podania (tylko) jednego, najnowszego artykułu. Jeśli w danej kategorii pojawią się dwa artykuły z tą samą datą, to oba zapytania zwrócą w tej kategorii nie jeden, lecz dwa artykuły.
Co do wydajności, to trudno powiedzieć. Domyślam się, że chodzi o MySQL, którego nie znam. Na Oracle użyłbym funkcji analitycznej, a na PostgresSQL zasymulowałbym funkcję analityczną funkcją napisaną pn. w pgplsql (być może to samo można zrobić w MySQL? wydaje mi się, że nie, ale może...)
Dużo zależy od indeksów i od optymalizatora. Jeżeli jest dużo artykułów, mało kategorii i kiepski optymalizator, to przykład gorii będzie wolniejszy (dużo podzapytań). Jeżeli jest dużo kategorii, mało artykułów a optymalizator dobry, to przykład gorii ma szanse być szybszy. I piszę teoretycznie, bo MySQL znam z nazwy."you don't need your smile when I cut
your throat"
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|