Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> warunkowe wykonianie JOIN
scytale
post
Post #1





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

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


witam. mam 2 tabele w bazie
tabela posty
post_id, post_title, ..., comment_status
comment_status moze przyjmowac 2 wartosci: 0 lub 1. jesli 0 to nie mozna dodawac komentarzy, jesli 1 to mozna

tabela komentarze
comment_id, post_id, itd...

Teraz tak, pobieram z bazy posty i licze ile jest komentarzy do nich

  1. SELECT p.post_id, p. post_title, ..., COUNT(c.comment_id) AS komentarze FROM posty p LEFT JOIN komentarze c ON p.post_id = c.post_id GROUP BY p.post_id

To zapytanie ladnie dziala, zlicza mi wszystkie komentarze. Ale robi tez JOINa dla postów, ktore na 100% nie będą miały komentarzy (pole comment_status ma wartość 0). Czy da sie zrobić tak, żeby przed wykonaniem JOINa sprawdzał wartość w polu comment_status i jesli bedzie tam 0 to nie robil joina tylko do pola komentarze odrazu wpisal 0, a jesli bedzie wartosc 1 to zeby normalnie wykonal joina.
I czy wogole oplaca sie to robic z punktu wydajności? Niby zaoszczędzi troche "mocy przerobowych" na joinie, ale musi tez troche wiecejtych mocy poswiecic na badanie wartosci pola
Go to the top of the page
+Quote Post
kitol
post
Post #2





Grupa: Zarejestrowani
Postów: 162
Pomógł: 26
Dołączył: 19.01.2007

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


  1. SELECT p.post_id, p. post_title, ..., COUNT(c.comment_id) AS komentarze
  2. FROM posty p
  3. LEFT JOIN (SELECT * FROM komentarze WHERE comment_status!=0 ) c ON p.post_id = c.post_id GROUP BY p.post_id


Nie wiem jak będzie wpływało to na wydajność. Najlepiej będzie jak wykonasz sobie benchmarki.

EDIT: Jak założysz indeks na comment_status to moce przerobowe nie zostaną "stracone" na badanie wartości pola. Czas wykonania zapytania powinien się zmiejszyć, ale to zależy od ilości danych i ilości comment_status!=0.

Ten post edytował kitol 14.02.2008, 16:40:42
Go to the top of the page
+Quote Post

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: 25.09.2025 - 00:36