我有一个数据库表,其设置方式如下:
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
如何返回第一个非空列的名称(仅在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)); 上面的查询几乎实现了我想要的,它返回第一个非空列的信息(因此在这个实例中,它返回lorem ipsum).我需要的是该列的名称。
然后我尝试了$cat = mysql_field_name($cat, 0); (见下面的信息)--但显然这需要在查询上运行,而不是从mysql_fetch_assoc返回的字符串。因此,我尝试这样做,并在查询上运行mysql_field_name,当我回显它时,它返回原始查询(coalesce(a, b, c, d, e, f))的一部分。怪怪的哈?
(信息 -mysql_field_name-获取结果中指定字段的名称)
回顾一下:我提供的PHP3行正在工作,并从一个列中提供信息,但我需要一种方法来获取该列的名称并将其存储到一个字符串中。谢谢
在遵循Gordon的方法之后,我将上面示例(查询)中的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,因为它实际上没有返回任何内容),我检查了所有列的名称是否正确等等。
发布于 2016-04-11 11:17:44
只需使用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
)发布于 2016-04-11 11:25:11
最简单的解决方案是在array_filter (过滤器)的帮助下,您可以为它提供一个数组,并且不需要回调,它将为您提供计算为true的alle元素。列名保留不变,因此您可以使用键函数。
所以就像这样:
$keys = key(array_filter($cat))在$keys上你可以找到你的名字。
https://stackoverflow.com/questions/36547171
复制相似问题