Найти и отсортировать по имени столбца в заданном условии MYSQL - PullRequest
1 голос
/ 23 июля 2011

В таблице у меня есть следующее значение:

    ID | Exercise1 | Exercise2 | Exercise3
     1 |     0     |     0     |     0
     2 |     0     |     0     |     0

Когда пользователь выполняет упражнение, БД переключается с «0» на «1». Я ищу SQL-запрос, который ищет по номеру идентификатора пользователя возвращает наименее столбец имя, которое установлено в 0.

EX:

ID | Exercise1 | Exercise2 | Exercise3
 1 |     1     |     1     |     0

Здесь запрос будет возвращаться с exercise3, поскольку exercise1 и exercise2 ранее были обновлены и выполнены пользователем.

я нашел SELECT COLUMN_NAME FROM information_schema.columns
но не могу соединить это с сортировкой, которую я ищу, любая помощь будет высоко оценена.

Ответы [ 3 ]

1 голос
/ 23 июля 2011

Как то так?

SELECT CASE
         WHEN Exercise1=0 THEN 'Exercise1'
         WHEN Exercise2=0 THEN 'Exercise2'
         WHEN Exercise3=0 THEN 'Exercise3'
         ELSE NULL
       END AS Exercise
  FROM MyTable
  WHERE ID = SomeID
1 голос
/ 23 июля 2011

Если у вас есть только несколько упражнений (например, <5), вы можете просто жестко закодировать запрос с помощью серии вложенных операторов IF (). </p>

Если у вас их больше, тогда вам следуетизмените модель данных, чтобы каждое отображение пользователя / упражнения было сохранено в отдельной строке.

0 голосов
/ 23 июля 2011

Хммм ... у вас проблемы, потому что ваш дизайн неправильный. Проблема в том, что на дизайн вашей базы данных повлияло то, как вы представляете представление таблицы. Но в базе данных мышление другое. База данных обычно проектируется следующим образом:

StudentID | ExcerciseID | Completed
     1    |     1       |     1
     1    |     2       |     1
     1    |     3       |     0
     2    |     1       |     0
....

И тогда вы можете сделать:

select StudentID, min(ExcerciseID) as FirstExcerciseNotCompleted
from Excercises
where Completed = 0

, чтобы увидеть первый неполный урок для каждого учащегося или, если вы хотите установить следующий выполненный урок на ученика 1, просто выполните:

update Excercises
set Completed = 1
where Student = 1 and ExcerciseID = (select min(ExcerciseID) from Excercises where StudentID = 1 and Completed = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...