2016-11-16 24 views
-1

我面臨一個問題,我無法自行解決。關於計數有幾個問題,但我沒有看到一個計數完成的地方,就像我需要的那樣。在我的表我有一個可以被人預訂,由他們代表的ID,像這樣的三個插槽:如何使用mysqli來計數多列?

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

這是可能的插槽是免費的,但它是不可能的,一個ID塊插槽。

現在我想指出每個ID在三個插槽上使用的頻率。其結果是這樣上面的表格:

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

可能與一個MySQL的聲明,或者我需要GROUP BY每個插槽,後來在我的腳本中添加插槽,最高?

如果可以在所有三個插槽中對mysql進行計數,那麼是否也可以將結果與第二個包含ID的名稱表進行結合?

+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結合使用以從第二個表中獲取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