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
 
 » NWN 05:02
 » Promilus 04:24
 » luckyluc 03:53
 » piszczyk 03:45
 » myszon 02:30
 » yeger 02:06
 » Holyboy 01:56
 » Zbyszek.J 01:53
 » marekzi 01:47
 » resmedia 01:43
 » SebaSTS 01:30
 » pwil2 01:27
 » GULIwer 01:22
 » biEski 01:20
 » wrrr 01:17
 » JaroMi 01:09

 Dzisiaj przeczytano
 6090 postów,
 wczoraj 38350

 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