Я пытаюсь написать несколько сложный запрос MySQL, который будет считать разные элементы, перечисленные в одном столбце, как относящиеся к другим критериям.Подсчет внутри одного столбца для разных результатов
В настоящее время единственными пунктами в столбце являются: MC, SR, MP и EV.
Этот код действительно работает, но мой вопрос в том, есть ли лучший и эффективный способ сделать это? Также, как добавить новый элемент в столбец?
$sql = "Select ps.id, ps.primary_skill,
count(*)
(select COUNT(*)
from items i, item_primary_skill_map ipsm
where i.id = ipsm.item_id
and ipsm.skill_id = ps.id
and i.itemType = 'MC') as mc_count,
(select COUNT(*)
from items i, item_primary_skill_map ipsm
where i.id = ipsm.item_id
and ipsm.skill_id = ps.id
and i.itemType = 'SR') as sr_count,
(select COUNT(*)
from items i, item_primary_skill_map ipsm
where i.id = ipsm.item_id
and ipsm.skill_id = ps.id
and i.itemType = 'MP') as mp_count,
(select COUNT(*)
from items i, item_primary_skill_map ipsm
where i.id = ipsm.item_id
and ipsm.skill_id = ps.id
and i.itemType = 'EV') as ev_count,
(select COUNT(*)
from items i, item_primary_skill_map ipsm
where i.id = ipsm.item_id
and ipsm.skill_id = ps.id
and i.dok = '1') as dok1,
(select COUNT(*)
from items i, item_primary_skill_map ipsm
where i.id = ipsm.item_id
and ipsm.skill_id = ps.id
and i.dok = '2') as dok2,
(select COUNT(*)
from items i, item_primary_skill_map ipsm
where i.id = ipsm.item_id
and ipsm.skill_id = ps.id
and i.dok = '3') as dok3,
(select COUNT(*)
from items i, item_primary_skill_map ipsm
where i.id = ipsm.item_id
and ipsm.skill_id = ps.id
and i.dok = '4') as dok4
FROM primary_skills ps
where grade = '$pl' and subject='$subject'
";
Вы могли бы предоставить таблицу результатов, которую вы ожидаете получить? – Alex