2016-07-16 62 views
0

設置了查詢逆轉查詢SQL

SELECT * from ____ 
    WHERE (Column1>0) and ____ 

好像叫通常使用的方法「什麼是有COLUMN1值> 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

出於好奇,你可以分享你的表結構?這是一個有效的問題,但我想知道爲什麼會出現這種問題 – billynoah

+1

這種問題是不良設計的症狀。數據庫表不是電子表格。 – Strawberry

+0

我的表中有很多定性列,包含整數0或1.我想通過一些約束隨機化一個ID,然後輸出這個記錄中哪些列的值爲1。 – user6571534

回答

2

你可以基於CASE建立一個字符串時應該進行驗證的或IF對每一列,如果該值大於0

例如:

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 
+0

很好的答案我不明白像你這樣的問題 – Cherif

1

我可以想到MySQL有兩種可能性,它們是CASEIF陳述,例如,下面

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; 
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,你可以自定義查詢,只要你喜歡