设置查询的常用方法
SELECT * from ____
WHERE (Column1>0) and ____
就像问“有什么记录的列1值> 0和列2 .....?”
但是现在我想以相反的方式做到这一点,
“对于此记录,哪些列的值> 0?”
如果列值满足条件,如果给定指定的记录ID,如何编写返回列名的查询?有非整数列,应该忽略。
编辑:我的表包含许多只占用0或1值的列。我想先通过一些约束来随机化ID,例如
SELECT id from ____
WHERE Views>5000 and Q1=1 and Q3=1
然后在显示之前进行随机化,以及哪些列= 1的结果。
“结果:ID:_____。观点:____。Q1,Q3,Q6,Q14,Q38,Q45,Q56存在。(= 1)”
现在从答案中我似乎必须逐列检查,而不是使用自动检查所有列的函数,所以我认为无论我使用SQL还是使用PHP进行后处理,方法都必须相同。我只是希望某种功能可以做到这一点而不是写循环。
答案 0 :(得分:2)
如果值大于0,您可以根据每个列构建一个基于CASE WHEN或IF的字符串。
例如:
CREATE TABLE test_tbl(
id INT NOT NULL AUTO_INCREMENT,
col1 INT,
col2 INT,
col3 INT,
PRIMARY KEY ( id )
);
insert into test_tbl (col1,col2,col3)
values
(0,0,0),
(8,0,0),
(8,null,8),
(8,8,8);
select
*,
TRIM(TRAILING ',' FROM
concat(
if(col1 > 0,'col1,',''),
case when col2 > 0 then 'col2,' else '' end,
if(col3 > 0,'col3,','')
)
) as bigger_than_0
from test_tbl
where (col1>0 or col2>0 or col3>0);
给出:
id col1 col2 col3 bigger_than_0
2 8 0 0 col1
3 8 null 8 col1,col3
4 8 8 8 col1,col2,col3
答案 1 :(得分:1)
MySQL
有两种可能性,我可以想到哪些是CASE
和IF
语句,例如以下
SELECT
id,
case
when a.column1 > 0 then 'column1'
else null
end AS col1,
case
when a.column2 > 0 then 'column2'
else null
end AS col2
FROM table_a a;
SELECT
id,
IF(column1 > 0, 'column 1', 'null') as col1,
IF(column2 > 0, 'column 2', 'null') as col2
FROM table_a a;
答案 2 :(得分:0)
这就是你想知道的:
create table TT(col1 int,col2 int,col3 int);
insert into TT values(1,0,1);
insert into TT values(4,0,5);
insert into TT values(1,0,3);
insert into TT values(1,0,0);
select distinct
'col1' as 'Column contains values >1'
from
TT
where
col1 > 0
union
select distinct
'col2' as 'Column contains values >1'
from
TT
where
col2 > 0
union
select distinct
'col3' as 'Column contains values >1'
from
TT
where
col3 > 0;
结果:
+---------------------------+
| Column contains values >1 |
+---------------------------+
| col1 |
| col3 |
+---------------------------+
因为col1和col3的值大于0,您可以根据自己的喜好自定义查询