Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Optymalizacja zapytania
Forum PHP.pl > Forum > Przedszkole
Lwik
Witam,
od jakiegoś czasu szukam pomysłu na przerobienie zapytania.
Aktualnie korzystam z takiego rozwiązania;
  1. $zapytanie = $this->sql->query("
  2. SELECT * from plany
  3. ");
  4. $i = 0;
  5. while($item = $zapytanie->fetch_array())
  6. {
  7. $zapytanie2 = $this->sql->fetch($this->sql->query("SELECT count(id) as count
  8. FROM rzeczy
  9. where rzeczy.user_id = ".$this->id." and rzeczy.plan_id = ".$item['id']));
  10. }

Jednak przy większej ilości planów (100) zaczyna robić się z tego wąskie gardło.
Czy jest jakaś możliwość wykorzystania tu jednego zapytania (Inner?), jeśli tak to jak to zrobić?
Muszę pobrać pełną zawartość tabeli `plany` i licznik z `rzeczy`.
Próbowałem tak:
  1. SELECT plany.name, COUNT( rzeczy.id ) AS count
  2. FROM plany
  3. INNER JOIN rzeczy ON plany.id = rzeczy.plan_id
  4. WHERE rzeczy.user_id = ".$this->id."

Ale nie do końca zwraca to co chcę (jeden licznik i nazwę)
Greg0
Poczytaj o JOIN w SQL
Lwik
Dzięki, nie pomyślałem o group.by
Rozwiązałem to tak:
  1. SELECT p.*, COUNT(DISTINCT r.id)
  2. FROM plany p
  3. LEFT JOIN rzecz r ON (p.id = r.plan_id)
  4. WHERE r.user_id = 1
  5. GROUP BY p.id

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.