Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » Shark20 03:06
 » Visar 03:00
 » Chavez 02:46
 » yanix 02:26
 » PaKu 02:20
 » metacom 02:18
 » xpx 02:17
 » abes99 01:30
 » luckyluc 01:30
 » Chrisu 01:26
 » PiotrexP 01:18
 » Martens 00:57
 » Wolf 00:44
 » CiAsTeK 00:39
 » bmiluch 00:38
 » Zic 00:36
 » rulezDC 00:36
 » Demo 00:15
 » rarek 00:09
 » buddookan 00:03

 Dzisiaj przeczytano
 41132 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
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

  1. 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"

    1. prawie , kubazzz 7/05/09 19:58
      ale nie wybiera najnowszych

      SM-S908

  2. 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 )

    1. 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