2016-06-28 5 views
0

Я пытаюсь перечислить простой запрос.Переменная WHERE в одном запросе

У меня есть таблица users с колоннами name и payment (значение которого может быть 1 или 0)

Я хочу, чтобы повторить все и сосчитать, сколько есть платеж 0 и сколько компенсация 1.

Я надеваю «знаю, где переменная ГОВОРЯ: "WHERE payment = 1 or 2"

$query=mysql_query('SELECT DISTINCT(COUNT(*)) AS how, name FROM users WHERE category = "1" group by name'); 

    while($result=mysql_fetch_array($query)) 
    { 
     echo 'Company: '.$result['name'].' - payment0: ???/payment1: ???<br>'; 
    } 

Пример:

name | payment 

aaa 1 

aaa 0 

bbb 1 

bbb 1 

bbb 1 

Так результат должен быть:

Company: aaa - payment0: 1, payment1: 1 

Company: bbb - payment0: 0, payment1: 3 

Как сделать это в один вопрос?

+0

Что такое номер оплаты или текст? Может ли он иметь значения 0/1 или 1/2? Это путается в вашем вопросе. Поскольку вы хотите агрегировать разные строки в разных столбцах, вам нужно будет использовать подзапросы. –

ответ

0

Если я вас правильно понимаю, это ваш ответ:

$query = mysql_query('SELECT DISTINCT(COUNT(*)) AS how, name FROM users WHERE category = "1" AND payment IN (1,2) GROUP BY name'); 
+0

нормально, но как я могу это повторить? –

+0

$ result ['payment] [1] ?? –

0

Как вы хотите, чтобы суммировать различные строки в разных столбцах (разные столбцы подсчитываются в payment0, чем в payment1 той же строки), вы должны использовать подзапросы:

SELECT DISTINCT 
    name, 
    q0.payment0 as payment0, 
    q1.payment1 as payment1 
FROM 
    users LEFT JOIN (
     SELECT DISTINCT name, COUNT(*) as payment0 
     FROM users WHERE category = 0) as q0 
     ON users.name = q0.name 
    LEFT JOIN 
     SELECT DISTINCT name, COUNT(*) as payment1 
     FROM usersWHERE category = 1) as q1 
     ON users.name = q1.name 

Тогда выборка:

while($result=mysql_fetch_array($query)) 
{ 
    echo 'Company: '.$result['name'].' - payment0: ['payment0']/payment1: ['payment1']<br>'; 
} 
0

QUER y вам нужно:

SELECT 
    `name`, 
    COUNT(IF(`payment` = 0, 1, 0)) AS `payment0` 
    COUNT(IF(`payment` = 1, 1, 0)) AS `payment1` 
FROM 
    `users` 
WHERE 
    `category` = '1' 
GROUP BY 
    `name` 
Смежные вопросы