2016-11-16 5 views
-1

私は自分で解決することができない問題に直面しています。カウントについてはいくつかの質問がありますが、私はそれが必要なようにカウントが行われている場所は見ませんでした。私のテーブルでは、私はこのように、自分のIDによって表される、人によって予約することができ、3つのスロットがありますmysqliで複数の列を数えるには?

ID | Slot1 | Slot2 | Slot3 
1 45  53 
2 1  27  6 
3 53 
4 6  45 
5 15  53 

スロットが自由であることは可能であるが、それはスロットにそのIDブロックできません。

ここで、3つのスロットで各IDがどのくらい頻繁に使用されたかをカウントしたいと思います。結果は上記の表のために次のようになります。

ID Count 
1 1 
6 2 
15 1 
27 1 
45 2 
53 3 

私は1つのMySQL文を使用して可能か、各スロットのためにGROUP BYに必要と私のスクリプトの後半のスロットを追加することですか?

3つのスロットすべてでmysqlでカウントできるのであれば、IDに名前を保持する2番目のテーブルと結果を結合することも可能ですか?

+1

はあなたが試したものを共有することはできますか? –

+0

わかりませんが、[this](http://stackoverflow.com/questions/18675069/count-non-empty-fields-mysql)があなたのためになるかもしれません.. – Naruto

+0

'multiple'は行が複数であるためにpleonasmですあなたの質問にはタイトルが意味をなさない。あなたの質問を明確にするために例が必要です。 – Xorifelse

答えて

5

あなたがunion allと集計たい:

select slot, count(*) 
from ((select slot1 as slot from t 
    ) union all 
     (select slot2 as slot from t 
    ) union all 
     (select slot3 as slot from t 
    ) 
    ) s 
where slot is not null 
group by slot 
+0

ありがとうございました。また、ここにJOIN LEFTを追加してIDに名前を付けることもできますか?私は数字だけでなく、スロットにテキストがあるように見えるので、tの後にWHEREを追加しました。 – Sikarjan

+0

@Sikarjan。 。 。あなたのコメントが何を指しているのか分かりません。上記は文字列と数字だけで動作するはずです。 –

+0

しかし、私はIDだけを必要とするので、Where句をWHERE≧0に変更しましたが、JIONと組み合わせて2番目のテーブルからIDに名前を付けることができれば、もっと興味があります。 – Sikarjan

0

あなたはUNIONを使用することができます。

SELECT s.SLOT_ID, COUNT(*) 
FROM (
    SELECT slot1 as slot_id FROM YourTable 
    UNION ALL 
    SELECT slot2 FROM YourTable 
    UNION ALL 
    SELECT slot3 FROM YourTable) s 
GROUP BY s.slot_id 
関連する問題