Подсчитайте первое появление в таблице, которое не дублируется

#php #mysql

#php #mysql

Вопрос:

Я создал таблицу на PHP для отображения представленных студентами доказательств по курсу.

Учащиеся подают заявку, чтобы указать, каким критериям соответствуют их файлы. По сути, это таблица с файлами, перечисленными внизу слева, и критериями, перечисленными вверху. Для каждого файла критерием являются тики-учащиеся.

Затем я хочу подсчитать, какие критерии соблюдены, а какие нет. В принципе, в каких столбцах есть отметки, а в каких нет.

Легко подсчитать все тики в таблице, но я изо всех сил пытаюсь понять, как подсчитывать отдельные тики по столбцам в таблице.

Есть идеи?

Комментарии:

1. можете ли вы добавить подробности о том, как вы храните данные? Вывод SHOW CREATE TABLE был бы идеальным

2. Не очень понятно, какие результаты вы хотите получить. Я высказал несколько смелых предположений и получил ответ, но было бы здорово получить более конкретную информацию.

3. Надеюсь, это изображение немного проясняется. Я ищу, какие критерии были заявлены. [ссылка] citybit.southampton-city.ac.uk/example . PNG в этом примере я ищу 4, которые будут возвращены.

4. Я отредактировал свой ответ в соответствии с вашим scema.

Ответ №1:

Если не совпадающий критерий является нулевым значением, то это подойдет:

 select student, 
    count(crit1) > 0 as crit1, 
    count(crit2) > 0 as crit2 
from submission
group by student
order by student
;
  

Ответ №2:

 SELECT ...
  COUNT(DISTINCT ...) ...
  

Ответ №3:

Я предполагаю, что у вас есть таблица, подобная (конечно, имена вместо CritX). Также предположим, что критерий без галочки будет иметь NULL значение:

 submission (fileanme, crit1, crit2, crit3, critN)
  

затем вы можете проверить, какие критерии были заявлены, а какие нет:

 SELECT MAX(crit1) AS crit1, MAX(crit2) AS crit2 FROM submission;
  

Вы можете получить количество категорий со значениями, отмеченными галочками:

 SELECT MAX(crit1)   MAX(crit2) AS number FROM submission;