2016-06-28 10 views
0

Ich versuche, eine einfache Abfrage aufzulisten.Variable WHERE in einer Abfrage

Ich habe Tabelle users mit den Säulen name und payment

Ich möchte alle und zählen echo (welcher Wert kann 1 oder 0 sein), wie viele haben Zahlung von 0 und wie viele Zahlungs 1.

I don ‚t wo Put-Variable wissen: "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>'; 
    } 

Beispiel:

name | payment 

aaa 1 

aaa 0 

bbb 1 

bbb 1 

bbb 1 

So führen sollte:

Company: aaa - payment0: 1, payment1: 1 

Company: bbb - payment0: 0, payment1: 3 

Wie das in einer Frage?

+0

Was ist Zahlungsnummer oder Text? Kann es Werte 0/1 oder 1/2 haben? Es ist verwirrend in deiner Frage. Wenn Sie verschiedene Zeilen in verschiedenen Spalten aggregieren möchten, müssen Sie Unterabfragen verwenden. –

Antwort

0

Wenn ich Sie richtig verstehe, ist dies Ihre Antwort:

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

ok aber wie kann ich das wiedergeben? –

+0

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

0

Wie Sie verschiedene Zeilen in verschiedenen Spalten zusammenfassen wollen (verschiedene Spalten in payment0 gezählt als in payment1 der gleichen Zeile) Sie müssen verwenden Unterabfragen:

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 

Dann fetching:

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

Die quer y Sie benötigen ist:

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` 
Verwandte Themen