У меня есть таблица базы данных настроить следующим образом:Выбор первого 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)
), когда я его повторяю. Странно, да?
(info - mysql_field_name
- Получить имя указанного поля в результате)
Для резюмировать: 3 линии РНР I, предоставляемой работает и предоставляет информацию из колонки, но мне нужен способ, чтобы получить ИМЯ этой колонки и храните его в строке. Благодаря
После выполнения метода Гордона я изменил первую строку моего 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
, как это на самом деле не возвращаются что угодно), я проверил все имена столбцов являются правильными и т.д.
См. [Почему я не должен использовать функции mysql_ * в PHP?] (Http://stackoverflow.com/q/12859942/214577). Этот код использует * очень * устаревшие функции, которые ** больше не являются частью PHP **. Вы можете захотеть (читайте: действительно, без каких-либо оправданий) отступите от них. – Oldskool
Да, да, я знаю, не добрался до обновления –