mysql получает имя столбца, когда значение столбца соответствует ограничению

Я пытаюсь получить имена столбцов из таблицы. Я хочу предоставить идентификатор строки, и мне нужны только имена столбцов, для которых значение этого столбца для конкретной строки (идентифицируемой идентификатором) является «истинным» (в моей таблице есть набор логических полей).

Я хочу что-то вроде:

SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME.value = true
        AND TABLE_THE_COLUMN_IS_FROM.id = "some_id"

Где .value будет переменной, в основном проверяя каждый столбец, чтобы убедиться, что это правда.

Я знаю, что могу просто получить значения строки и выполнить итерацию, возвращая только те, которые имеют значение true, но я хотел посмотреть, есть ли способ сделать все это за один шаг. Заранее спасибо всем, кто знает!


person ace    schedule 08.04.2011    source источник
comment
Чего вы пытаетесь достичь?   -  person Khez    schedule 08.04.2011
comment
Я отредактировал вопрос, надеюсь, он стал более понятным.   -  person ace    schedule 08.04.2011


Ответы (2)


В одном запросе нет средств для динамического сканирования схемы таблицы и проверки ее значений. Лучший способ добиться желаемого - это тот, который вы предложили: запросить строку на стороне клиента, а затем циклически просмотреть столбцы в поисках значений, которые вы ищете. Другой альтернативой является запрос схемы таблицы с использованием представления INFORMATION SCHEMA на стороне клиента, создание оператора SQL с предложением where, которое ищет значение True во всех логических столбцах, выполнение его и проверка результатов.

person Thomas    schedule 08.04.2011

Это, вероятно, будет довольно некрасиво, как бы вы это ни подрезали, но вот один вариант:

select columns.column_name
from bool_table
inner join information_schema.columns
on columns.table_schema = 'your_db'
and columns.table_name = 'bool_table'
and ((columns.column_name = 'bool_1' and bool_table.bool_1 = 1)
     or (columns.column_name = 'bool_2' and bool_table.bool_2 = 1))
where bool_table.id = 25

Вы также можете запросить информацию_schema.columns для динамического создания списка операторов столбца, чтобы вы могли динамически генерировать запрос и даже выполнять его в хранимой процедуре, используя динамический sql в mysql.

person squawknull    schedule 08.04.2011
comment
Я пытался заставить это работать, но безуспешно ... в любом случае, я думаю, вы правы, когда говорите, что это некрасиво, поэтому только для удобочитаемости я собираюсь пойти с ответом "Не делайте этого" как правильным. Ценю работу! - person ace; 09.04.2011