Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] where i funkcja max
peter13135
post
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


  1. SELECT f. * , t.name AS lt_name, t.id AS lt_id
  2. FROM `laczekbb_forums` f
  3. LEFT JOIN `laczekbb_topics` t ON f.id = t.forum
  4. WHERE t.id = max( t.id )
  5. GROUP BY f.id ASC
  6. ORDER BY f.cat ASC , f.id ASC


omówienie zapytania:
zapytanie ma za zadanie pobierać fora oraz ostatni temat w danym forum
tabela `laczekbb_forums` to poprostu fora/kategorie forum
tabela `laczekbb_topics` to tematy które są uporządkowane w tych kategoriach
t.forum - to id forum w jakim znajduje się temat

problem polega na tym że po dodaniu
  1. WHERE t.id = max( t.id )

zapytanie nie działa,

w jaki sposob mogę osiągnąć to że do tych for "doklejany" jest temat o najwyższym id w danej kategorii ?

czyli jeśli mam 3 tematy w konkretnym forum, i mają kolejo id 1,43,678 to żeby mi wybrało ten z id 678. Dodam że dodanie Order by t.id DESC nie pomoga


PS. no właściwie to wolałbym po dacie a nie po id, ale to już sobie poradzę żeby to przerobić
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Widzę, że nawet nie sprawdziłeś czy zapytanie jakie Ci podałem działa! Dorwałem się do swojego kompa i założyłem 2 tabele:
FORUM
id nazwa
1 Pierwsze
2 Drugie
3 Trzecie
4 Czwarte

TOPIC
id forum_id nazwa
1 1 Jeden
2 1 Dwa
3 1 Trzy
4 3 Cztery
5 3 Pięć
6 3 Sześć
7 4 Siedem
8 4 Osiem

Zauważ, że forum o id = 2 nie ma topiców żadnych... Teraz zapytanie:
  1. SELECT * FROM (SELECT f.id AS forum, f.nazwa AS nazwa_forum, t.id AS topic_id FROM forum f LEFT JOIN topic t ON f.id = t.forum_id ORDER BY f.id ASC, t.id DESC) a GROUP BY a.forum

i w efekcie dostałem...
forum nazwa_forum topic_id
1 Pierwsze 3
2 Drugie NULL
3 Trzecie 6
4 Czwarte 8
Czy było to tak trudno sprawdzić?

Co lepsze... Minimalna zmiana i nawet LEFT JOIN wystarczył:
  1. SELECT f.id AS forum, f.nazwa AS nazwa_forum, max(t.id) AS topic_id FROM forum f LEFT JOIN topic t ON f.id = t.forum_id GROUP BY f.id


EDIT: Twoje selecty i join zostały skrócone do jednego LEFT JOIN i grupowania (IMG:style_emoticons/default/smile.gif) Wystarczy teraz jedynie sprawdzać, czy topic_id jest równe NULL. Jeśli tak to znaczy, że forum nie posiada tematów.

EDIT2: Zerknąłem na stronę MySQL.... Tam przykład z LEFT JOIN jest nawet w przykładach (IMG:style_emoticons/default/sciana.gif)
http://dev.mysql.com/doc/refman/5.1/en/exa...lumn-group.html

Ten post edytował thek 12.12.2009, 20:36:38
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: 4.10.2025 - 21:42