Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie z MAX + łączenie 2 tabel
-lukasamd-
post 27.07.2008, 09:29:00
Post #1





Goście







Witam,
mam na forum (phorum) tabelę z wiadomościami z której pobieram

- message_id
- datestamp
- forum_id
- subject
- thread
- user_id
- author
- thread_count

Chyba zawartości nie muszę tłumaczyć, po nazwach da się rozpoznać smile.gif Aby pobrać najnowsze posty daję zapytanie:

  1. 'SELECT MAX(message_id) as message_id, forum_id, subject, thread, MAX(user_id) as user_id, author, thread_count, MAX(datestamp) as datestamp
  2. FROM phorum_messages GROUP BY thread
  3. ORDER BY message_id DESC'


Tak skonstruowane pobiera mi najwyższe massage_id, user_id oraz datestamp z danego wątku. Wszystko wydaje się być ok... ale jednak nie jest :/ Author jest zawsze wybierany ten sam - autor tematu zamiast autora ostatniego postu. Próbowałem "podpiąć się" pod drugą tabelę z użytkownikami z której pobierałbym wartość "username":

  1. 'SELECT MAX(message_id) as message_id, forum_id, subject, thread, MAX(phorum_messages.user_id) as user_id, username, thread_count, MAX(datestamp) as datestamp
  2. FROM phorum_messages, phorum_users
  3. GROUP BY thread
  4. ORDER BY message_id DESC'


Działa "prawie" jak należy - w pierwszym wypadku wybrało odpowiedniego usera, niestety w każdym następnym się on powtarza (choć wcale nie jest autorem ostatniego posta w innych topicach).

Może ktoś pomóc? Już mnie po prostu trafia - jakby nie mogli w tym skrypcie dać tabeli topics jak w każdym innym cywilizowanym... sciana.gif

Ten post edytował lukasamd 27.07.2008, 09:30:15
Go to the top of the page
+Quote Post
osiris
post 27.07.2008, 14:07:24
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


Kolejny raz ten sam problem. Podane przez Ciebie zapytania nie sa zgodne ze standardem SQL i dlatego zwracaja wyniki inne od oczekiwanych. MySQL udostepnia feature, ktory pozwala na grupowanie tylko po niektorych kolumnach podanych w klauzuli SELECT - co w przypadku nieznajomosci zastosowania tego feature'a czesto jest przyczyna otrzymywania blednych, a raczej innych od oczekiwanych wynikow tych zapytan.
Wiecej info tutaj:
http://dev.mysql.com/doc/refman/5.0/en/gro...den-fields.html

Pozdrawiam
Go to the top of the page
+Quote Post
-lukasamd-
post 27.07.2008, 15:36:04
Post #3





Goście







Wszystkie tutoriale do GROUP BY jakie widziałem dawały przykłady na poleceniach typu SELECT SUM czy właśnie SELECT COUNT a nie wyciąganie takich danych jak ja chcę i/lub z łączeniem tabel. A dobra, wywalę pokazywanie autora postu - gdyby phorum miało sensowniej zrobioną bazę to i bez grupowania by się wyciągało takie informacje (tak jak to można zrobić w phpbb2/3, mybb, smf itp.).

Mimo wszystko dzięki za pomoc.
Go to the top of the page
+Quote Post
osiris
post 27.07.2008, 15:50:56
Post #4





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


Rozwiazanie z uzyciem zapytania skolerowanego:
  1. SELECT *
  2. FROM phorum_messages p1
  3. WHERE p1.datestamp = (SELECT MAX(p2.datestamp) FROM phorum_messages p2 WHERE p2.thread = p1.thread)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 13:05