Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Subzapytania. Czy to zapytanie jest wydajne?
maviozo
post
Post #1





Grupa: Zarejestrowani
Postów: 197
Pomógł: 24
Dołączył: 22.11.2010

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


Przede wszystkim zacznę od tego, że mam świadomość istnienia darmowych skryptów forum (IMG:style_emoticons/default/tongue.gif) piszę sobie go w celach edukacyjnych plus zaliczenie przedmiotu (IMG:style_emoticons/default/tongue.gif)

Mam trzy tabele: user, forum, forum_posty.
To co nas interesuje z user, to tylko imie i nazwisko.
Tabela forum zawiera nazwy tematów, datę założenia, id, autora oraz czy temat jest widoczny.
Tabela forum_posty zawiera id posta, id tematu, autora, treść, datę i czy jest widoczny.

Problem:

Chcę wyświetlić listę tematów wg najnowszych postów, wraz z datą ostatniego i liczbą postów z tematu.
Urodziłem takie zapytanie:
  1. SELECT forum.topic_id AS id,nazwa,
  2. CONCAT(`user`.`imie`," ",`user`.`nazwisko`) AS `autor`,`forum`.`data` AS `data`,
  3. (SELECT COUNT(post_id) FROM `forum_posty`
  4. WHERE `forum_posty`.`topic_id`=`forum`.`topic_id`
  5. AND widoczny=1) AS liczba_postow,
  6. (SELECT `data` FROM `forum_posty`
  7. WHERE `forum_posty`.`topic_id`=`forum`.`topic_id` AND widoczny=1
  8. ORDER BY `post_id` DESC LIMIT 1) AS ostatni_post
  9. FROM `forum`
  10. LEFT JOIN `user` ON `user`.`user_id`=`autor`
  11. WHERE `aktywny`=1
  12. ORDER BY ostatni_post DESC

Zapytanie daje oczekiwany rezultat. Jednak trochę martwi mnie to, że są tutaj aż trzy zapytania. Oczywiście na ten projekt to nie problem, w sumie nie wiadomo, czy kiedykolwiek będę musiał przejmować się wydajnością, jednak zawsze warto takie rzeczy wiedzieć (IMG:style_emoticons/default/wink.gif) Zatem jak można zrobić to wydajniej?

Pozdrawiam.
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: 2.10.2025 - 22:27