Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: warunkowe wykonianie JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
scytale
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
kitol
  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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.