Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Bazy danych _ [mysql] zmienna WHERE w jednym zapytaniu

Napisany przez: M@X 28.06.2016, 17:47:59

Cześć.

Próbuje wylistowac proste zapytanie.
Mam tabele "users" i kolumny: "name" i "payment" = (1/0)
Chcę wylistować i zliczyć ile takich samych "name" ma payment = 0 a ile payment = 1.
Nie wiem w jaki sposób dać możliwość wyświetlania coś na zasadzie: "WHERE payment = 1 or 2"

  1. $query=mysql_query('SELECT DISTINCT(COUNT(*)) AS how, name FROM users WHERE category = "1" group by name');
  2.  
  3. while($result=mysql_fetch_array($query))
  4. {
  5. echo 'Company: '.$result['name'].' - payment0: ? ? ? / payment1: ? ? ?<br>';
  6. }


Przykładowa tabela:

name | payment
aaa 1
aaa 0
bbb 1
bbb 1
bbb 1


Więc wynik powinien być taki:

Company: aaa - payment0: 1, payment1: 1
Company: bbb - payment0: 0, payment1: 3


W jaki sposób zrobić to w jednym zapytaniu ?

Napisany przez: trueblue 28.06.2016, 18:11:32

  1. SELECT name,
  2. SUM(ilosc*(1-payment)) AS payment0,
  3. SUM(ilosc*(1-ABS(SIGN(payment-1)))) AS payment1
  4. FROM (SELECT name,payment,COUNT(payment) AS ilosc FROM users GROUP BY name,payment) AS tmp
  5. GROUP BY name

Napisany przez: mmmmmmm 28.06.2016, 19:58:01

Z jednym grupowaniem: http://sqlfiddle.com/#!9/1b24c/2

Napisany przez: trueblue 29.06.2016, 14:24:13

Bez COALESCE i CASE:

  1. SELECT
  2. name,
  3. SUM(payment=0) AS payment0,
  4. SUM(payment=1) AS payment1
  5. FROM
  6. users
  7. GROUP BY name;


A swoją drogą, M@X, jaki powinien być wynik, jeśli dla danego name brak jakiejkolwiek opcji payment?

Napisany przez: StevDefs 24.08.2019, 06:44:52

Viagra Sildenafil Mujeres http://ilfrc.com Cytotec Abortion Buy Online In The Us

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)