![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 1 Dołączył: 25.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam mały problem z zapytaniem.
Mam tabelki: board_topic -> id,id_autora_tematu,id_autora_ostaniego_posta user -> id,name Nazwy są intuicyjne, mimo tego wyjaśnię: Pierwsza przechowuje id tematu, id użytkownika który założył temat, i id użytkownika który jako ostatni wypowiedział się w temacie. Problem pojawia się kiedy chce pobrać 20 rekordów. Wykombinowałem to tak:
Jak widać każdy z tematów występuje 2 razy, i jest to zrozumiałe -> tak skonstruowane jest zapytanie. Jest jakiś inny sposób aby złączyć tabele w sposób: jednemu rekordowi z jednej dołączamy 2 z innej tabeli ? //---------------------------------------------- Coś nie daję rady z tym SQL dzisiaj (IMG:style_emoticons/default/biggrin.gif) Mam tabele z tematami -> które podzieliłem na kategorię. I chce pobrać po 20 rekordów z każdej.
Oczywiście mogę to zrobić jak wyżej z 3 SELECT wykorzystując multipleQuery. Ale da się to zrobić lepiej ? optymalniej ? może w 1 zapytaniu ? Ten post edytował tadeurz 31.05.2013, 23:30:51 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Nie widzę przeszkód by łączyć dwukrotnie do tej samej tabeli (pod innymi aliasami), za pierwszym razem by dostać dane autora, za drugim by dostać dane ostatniego wypowiadającego się w temacie.
Wtedy limit 20 będzie dotyczył pojedyńczych tematów. Poza tym, jeśli w każdym temacie oba pola są wypełnione (jeśli nikt nie odpowiedział to post startowy traktujemy jako ostatni, więc oba id są identyczne), a użytkownicy nie są kasowani ani nie zmieniają id, to nie jest potrzebny LEFT JOIN, wystarczy zwykły JOIN ( czyli INNER JOIN precyzyjnie ujmując ). Ten post edytował pmir13 1.06.2013, 06:16:41 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 08:02 |