Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Left join
Cinamicom
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 8.07.2013

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


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ć?

Ten post edytował Cinamicom 31.07.2014, 19:03:24
Go to the top of the page
+Quote Post
pitu
post
Post #2





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


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)"
Go to the top of the page
+Quote Post
Cinamicom
post
Post #3





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 8.07.2013

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


Undefined index: COUNT(two.id)

a one.id jest * 4 (4 rekordy z tabeli two)
Go to the top of the page
+Quote Post
pitu
post
Post #4





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


Wrzuć do zapytania z aliasem:
  1. COUNT(DISTINCT two.id) AS countTwo


wtedy w PHP:
  1. .$row['countTwo']
Go to the top of the page
+Quote Post
Cinamicom
post
Post #5





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 8.07.2013

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


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.

Ten post edytował Cinamicom 1.08.2014, 12:19:18
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


  1. sum(IF(is_yes=1,1,0)),sum(IF(is_yes=0,1,0))
Go to the top of the page
+Quote Post
Cinamicom
post
Post #7





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 8.07.2013

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


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ę.
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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.
Go to the top of the page
+Quote Post
Cinamicom
post
Post #9





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 8.07.2013

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


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.

Ten post edytował Cinamicom 1.08.2014, 13:04:49
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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)


Go to the top of the page
+Quote Post
Cinamicom
post
Post #11





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 8.07.2013

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


Dzięki piękne. A jak to teraz wyświetlić? wcześniej miałem $row['COUNT(one)']
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


['yes'] ['no']
Go to the top of the page
+Quote Post
Cinamicom
post
Post #13





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 8.07.2013

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


Woow! Dziękuje Wszystkim bardzo. Nareszcie pieknie działa.
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: 23.08.2025 - 16:27