Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SELECT TOP 'n' RECORDS FROM EACH CATEGORY?
nTiger
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 11.09.2014

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


Witam, od paru dni probuje i probuje rozwiazac problem na ktory sie natknalem i stoje w miejscu, mianowicie potrzebuje uzyskac 2 rekordow o najnizszym czasie z kazdej kategorii.

Moje tabele wygladaja o tak:
  1. sr_id | category | map | time | short
  2. 0 100 map1 100 0
  3. 0 100 map1 200 0
  4. 0 100 map1 300 0
  5. 0 100 map2 100 0
  6. 0 100 map2 200 0
  7. 0 100 map2 300 0
  8. 0 200 map1 100 0
  9. 0 200 map1 200 0
  10. 0 200 map1 300 0
  11. 0 200 map2 100 0
  12. 0 200 map2 200 0
  13. 0 200 map2 300 0
  14. 0 333 map1 100 0
  15. 0 333 map1 200 0
  16. 0 333 map1 300 0
  17. 0 333 map2 100 0
  18. 0 333 map2 200 0
  19. 0 333 map2 300 0


chce wybrac po 2 najlepsze czasy z tabeli 'time' z kazdej kategorii z tabeli 'category', gdzie tabela 'map' = 'map1' czyli powinno to wygladac nastepujaco:

  1. sr_id | category | map | time | short
  2. 0 100 map1 100 0
  3. 0 100 map1 200 0
  4. 0 200 map1 100 0
  5. 0 200 map1 200 0
  6. 0 333 map1 100 0
  7. 0 333 map1 200 0


udalo mi sie wykonac 2 sposoby, lecz zaden nie dziala tak jak powinien, wygladaja one o tak:

  1. SELECT tabela_times.* FROM tabela_times JOIN (SELECT t1.category, t1.time, COUNT(t2.category) AS theCount
  2. FROM tabela_times t1 LEFT JOIN tabela_times t2 ON t1.category = t2.category AND t1.time > t2.time
  3. GROUP BY t1.category, t1.time ASC
  4. WHERE (theCount < 2)) AS dt USING (category, time);


To akurat smiga bez zazuty, lecz wyszukuje on z kazdej mapy, a ja potrzebuje tylko z mapy 'map1', wiem ze mogl bym dodac " WHERE map = 'map1' ", ale nie mam pojecia w ktorym miejscu to dodac.

Mam takze 2 rozwiazanie ktore dziala bez problemu: (ale)

  1. SET @oldGroup := 0, @count := 0; SELECT @oldGroup := category, tabela_times.* FROM tabela_times HAVING map = 'map1' AND short = '1' AND (@count := IF(category <=> @oldGroup, @count+1, 0)) < 15 ORDER BY category, time ASC;


ale przez to ze jest wywolana funkcja ( SET @oldGroup := 0, @count := 0; ) przed 'SELECT' moj plugin nie akceptuje juz niczego innego

Ten post edytował nTiger 11.09.2014, 10:01:16
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 22.08.2025 - 22:24