Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Left join
Forum PHP.pl > Forum > PHP
Cinamicom
Witam. $row['count(one.id)'] działa, a $row['count(two.id)'] zwraca tyle co one.id

A one zamiast 4 ma wartość nagle 16 jakimś cudem..

Proszę o pomoc

  1. $stmt = $this->database->custom("SELECT one.date, COUNT(one.id), COUNT(two.id) FROM leads LEFT JOIN two ON two.id = two.id GROUP BY DAY(one.date)");
  2.  
  3. $columnStats = '';
  4. foreach($stmt as $row)
  5. {
  6. $columnStats .= '[\''.substr($row['date'], 0, -9).'\', '.$row['COUNT(two.id)'].', '.$row['COUNT(one.id)'].'],';
  7. }


Albo jak zamiast po LEFT JOIN dam po prostu po przecinku, drugą tabelę. to tak samo wartość mi się zmienia z 4 na 16. - Aha bo w drugiej tabeli mam 4 rekordy, i wszystko się robi * 4.. Jak to naprawić?
pitu
Zobacz:

  1. "SELECT one.date, COUNT(one.id), COUNT(distinct two.id) FROM leads LEFT JOIN two ON two.id = two.id GROUP BY DAY(one.date)"
Cinamicom
Undefined index: COUNT(two.id)

a one.id jest * 4 (4 rekordy z tabeli two)
pitu
Wrzuć do zapytania z aliasem:
  1. COUNT(DISTINCT two.id) AS countTwo


wtedy w PHP:
  1. .$row['countTwo']
Cinamicom
Niestety to nie pomaga. Zwraca ilość rekordów, ale nie pogrupowane jest.

No i w przypadku one - dalej jest * ilość rekordów w two

Na końcu jest one.date, trzeba dodać żeby jeszcze było two.date. Ale nie mam pojęcia jak




ALBO INACZEJ-----------------

Zrobię to wszystko na jednej tabeli, ale potrzebują dwa warunki where is_yes = 1 no i where is_yes = 0

Jedno count liczy z warunkiem is_yes = 1, drugi count liczy z warunkiem is_yes = 0.

Proszę o pomoc.
trueblue
  1. sum(IF(is_yes=1,1,0)),sum(IF(is_yes=0,1,0))
Cinamicom
trueblue.

Dzięki, a mógłbyś mnie za rączkę poprowadzić? Jak potem mam tego w php użyć, i jak te zapytanie ma finalnie wygląąć?



Bardzo proszę.
trueblue
Jeśli dane będziesz miał w jeden tabeli (tak zrozumiałem), i kolumnę "is_yes" równą 0 lub 1, to wykorzystujesz to z zapytaniu.
Chcesz to inaczej zrobić?
Najlepiej jakbyś pokazał kawałek danych.
Cinamicom
Bo patrz.

Mam jedną tabele:

id AI
date - DATETIME
is_yes - int, default 0


Mam 10 rekordów.

5 z nich są z wartością is_yes = 1, no i pozostałe 5 is_yes = 0

Potrzebuję wyświetlić to na wykresie (google chart)

I potrzebuję to w takim formacie:

['Data', 'Ilość z is_yes = 1', 'Ilość z is_yes = 0']



Mam te 10 rekordów, są różne daty - i są one pogrupowane po dniu.

Męczę się z tym od wczoraj.

Nie mogę zrobić w 2 zapytaniach, bo będą się daty różniły.
trueblue
No, to właśnie z użyciem SUM.
  1. SELECT date,sum(IF(is_yes=1,1,0)) AS yes,sum(IF(is_yes=0,1,0)) AS no FROM tabela GROUP BY date

ewentualnie
  1. GROUP BY date(date)


Cinamicom
Dzięki piękne. A jak to teraz wyświetlić? wcześniej miałem $row['COUNT(one)']
trueblue
['yes'] ['no']
Cinamicom
Woow! Dziękuje Wszystkim bardzo. Nareszcie pieknie działa.
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.