2016-11-16 7 views
-1

У меня возникла проблема, которую я не могу решить самостоятельно. Там несколько вопросов, которые касаются подсчета, но я не видел того, где подсчет выполняется, как будто мне это нужно. В моей таблице у меня есть три слота, которые могут быть забронированы на лицо, в лице их ID, как это:Как подсчитать несколько столбцов с помощью mysqli?

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

Вполне возможно, что слоты свободны, но не исключено, что идентификатор блок слотов.

Теперь я хотел бы подсчитать, как часто каждый идентификатор используется в трех слотах. Результат будет выглядеть следующим образом для приведенных выше таблиц:

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

Это возможен с одним туздо заявлением или мне нужно сделать GROUP BY для каждого слота и добавить слоты позже в моем сценарии?

Если возможно выполнить подсчет в mysql по всем трем слотам, можно ли также присоединиться к результату со второй таблицей, содержащей имена для идентификаторов?

+1

Можете ли вы поделиться тем, что вы уже пробовали? –

+0

Не уверен, но [это] (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 здесь, чтобы получить имена для идентификаторов? Я добавил WHERE после t, так как, по-видимому, у меня не только номера, но и некоторый текст в моих слотах. – Sikarjan

+0

@ Сикарян. , , Я не уверен, к чему относится ваш комментарий. Вышеупомянутое должно работать со строками, а также с числами. –

+0

Он делает, но мне нужны только идентификаторы, поэтому я изменил предложение where в слове WHERE> 0, но меня больше интересует, могу ли я объединить это с JION, чтобы получить имя от идентификатора со второй таблицы. – 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 
Смежные вопросы