Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Optymalizacja zapytania
Lwik
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 8
Dołączył: 11.05.2012

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


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ę)

Ten post edytował Lwik 28.04.2013, 18:10:52
Go to the top of the page
+Quote Post
Greg0
post
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


Poczytaj o JOIN w SQL
Go to the top of the page
+Quote Post
Lwik
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 8
Dołączył: 11.05.2012

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


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



Ten post edytował Lwik 28.04.2013, 18:22:10
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 05:30