2016-09-13 4 views
1

私はいくつかのカテゴリを持つテーブルを持っており、それらの値に対して値を持っています - 私はそのテーブルから(MySQLのみを使用して)値がゼロでないカテゴリの名前と値そのもの。私のようなものを取得する必要があります上記で値がゼロでないクエリ内でMySQLからのフィールド名を取得する

ID car phone gym pension 
1 200 15  12 20 
2 0  15  12 25 
3 0  0  0  30 
4 0  0  0  0 
5 150 20  12 0 

:たとえば

1 Car  200 
1 Phone 15 
1 Gym  12 
1 Pension 20 
2 Phone 15 
2 Gym  12 
2 Pension 25 
3 Pension 30 
5 Car  150 
5 Phone 20 
5 Gym  12 

以下のクエリは私に正しいIDと値を返しますが、それはまた除き(ゼロ値を返します。 ID 4の場合)、カテゴリ名ではありません。

SELECT id, car, phone, gym, pension from benefits where (car!=0 OR phone!=0 OR gym!=0 OR pension!=0) 

私はこれをPHPでも行うことができますoこれをMySQLでちょうど行いますか?

+0

'(理由はあります(車!= 0 AND電話!= 0 ANDジム!= 0 AND年金!= 0) ' – Bonatti

+0

の代わりに、車は!= 0 OR電話!= 0 ORジム!= 0 OR年金!= 0)彼が望んでいるもの... – Santi

+0

imo、悲しいことに、あなたが必要とする出力は、データベースorigina lly。 ; -/ –

答えて

3

あなたはUNION ALLを使用してそれを行うことができます。

SELECT id, car AS col 
FROM benefits 
WHERE car!=0 

UNION ALL 

SELECT id, phone AS col 
FROM benefits 
WHERE phone!=0 

UNION ALL 

SELECT id, gym AS col 
FROM benefits 
WHERE gym!=0 

UNION ALL 

SELECT id, pension AS col 
FROM benefits 
WHERE pension !=0 
2

を、私はこの目標を達成するための最も簡単な方法は、一度列ごとに、UNION ALLを使用していると思う:

SELECT id,'Car' as val , car 
FROM benefits WHERE car <> 0 

UNION ALL 

SELECT id,'Phone' as val , phone 
FROM benefits WHERE phone <> 0 

UNION ALL 

SELECT id,'Car' as val , car 
FROM benefits WHERE car <> 0 

UNION ALL 

SELECT id,'Gym' as val , Gym 
FROM benefits WHERE Gym<> 0 

UNION ALL 

SELECT id,'Pension' as val , Pension 
FROM benefits WHERE Pension <> 0 

order by id 
関連する問題