我喜欢使用另一个查询的结果来解决列名。为此,我喜欢使用class MyClass:
def __init__(self):
self.value = 0
def set_value(self, value):
self.value = 5
def get_value(self):
return self.value
value = print("Hello")
print('hi')
a = MyClass()
#output
>>> Hello
>>>hi
。但不知怎的,它不起作用;当我运行这一行时,我得到0行:
CONCAT()
当我不使用SELECT * FROM cover WHERE CONCAT('c','9') = 1;
时,它可以完美地运作:
CONCAT()
SELECT * FROM cover WHERE c9 = 1;
似乎也有效。有了这个我得到一个结果:
CONCAT()
我尝试了这个问题的所有解决方案: MySQL select with CONCAT condition
像这样的人,但我总是得到0:SELECT CONCAT('c','9');
我的MySQL版本是; 10.1.16 - MariaDB的
答案 0 :(得分:3)
在一堆列中展开数组是一种糟糕的模式设计。而且,正如您所发现的那样,很难使用这些列。为c
值构建另一个表。
或者...
有很多0/1“列”,请考虑SET
或BIGINT UNSIGNED
;要么在一小部分空间中最多可容纳64个布尔标志。并且,使用不同的代码,可以使用BLOB
。
要从BIGINT
中提取第22位,((col >> 22) & 1)
会给你0或1。
答案 1 :(得分:2)
考虑使用case when
,因为预先知道选项的数量(您只能访问存在的列):
SELECT id
FROM cover
WHERE case ?
when 1 then c1
when 2 then c2
when 9 then c9
end = 1
...问号将是提供的值,例如你的例子中的9。