Выбор первого столбца NOT NULL, затем получение имени этого столбца

У меня есть таблица базы данных, настроенная следующим образом:

table
--------
id: 123
name: test
description: lorem ipsum
a: NULL
b: NULL
c: NULL
d: lorem ipsum
e: NULL
f: lorem ipsum

Тогда у меня есть переменная на моей странице PHP, $id = 123

Как я могу вернуть название первого столбца NOT NULL, поиск в a, b, c, d, e, f только? Так что в этом случае запрос вернет d или же f в строку. (НЕ lorem ipsum)

Вот что я попробовал, чтобы вы лучше поняли, что мне нужно:

(насколько я знаю, COALESCE() «вернет первый ненулевой аргумент»)

$cat = mysql_query("SELECT coalesce(a, b, c, d, e, f) FROM table WHERE `id`='$id' LIMIT 1");
$cat = mysql_fetch_assoc($cat);
$cat = array_shift(array_values($cat));

Вышеупомянутый запрос почти выполняет то, что я хочу, он возвращает информацию о первом столбце NOT NULL (поэтому в этом случае он возвращает lorem ipsum) … что мне нужно это НАЗВАНИЕ этого столбца.

Итак, я попытался $cat = mysql_field_name($cat, 0); (см. ниже информацию) — но, очевидно, это нужно выполнить в запросе, а не в строке, возвращаемой из mysql_fetch_assoc, Поэтому я попытался сделать именно это и работает mysql_field_name на запрос, и он возвращает часть исходного запроса (coalesce(a, b, c, d, e, f)) когда я повторяю это. Странно, да?

(Информацияmysql_field_name — получить имя указанного поля в результате)

Напомним: 3 строки PHP, которые я предоставил, работают и предоставляют информацию из столбца, но мне нужен способ получить НАЗВАНИЕ этого столбца и сохранить его в строку. Спасибо


Следуя методу Гордона, я изменил первую строку моего PHP в приведенном выше примере (запрос) на $cat = mysql_query("select (case when a is not null then 'a' when b is not null then 'b' when c is not null then 'c' when d is not null then 'd' when e is not null then 'e' when f is not null then 'f' end) FROM directory WHERE id='$id' LIMIT 1") но он возвращает логическое значение (поэтому я не могу запустить mysql_fetch_assoc поскольку он фактически ничего не возвращает), я проверил правильность всех имен столбцов и т. д.

0

Решение

Самое простое решение было бы с помощью array_filter (array_filter)
Вы можете дать ему массив и без обратного вызова, он даст вам все элементы, которые оцениваются как true. Имя столбца остается, так что вы можете использовать функцию ключа.
Так что-то вроде этого:

$keys = key(array_filter($cat))

И на $ keys [0] вы найдете свое имя.

1

Другие решения

Просто используйте case:

select (
case
when a is not null then 'a'
when b is not null then 'b'
when c is not null then 'c'
when d is not null then 'd'
when e is not null then 'e'
when f is not null then 'f'
end
)
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector