如何在MariaDB中组合CONCAT()和WHERE?

时间:2017-08-27 21:45:45

标签: mysql mariadb

我喜欢使用另一个查询的结果来解决列名。为此,我喜欢使用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的

2 个答案:

答案 0 :(得分:3)

在一堆列中展开数组是一种糟糕的模式设计。而且,正如您所发现的那样,很难使用这些列。为c值构建另一个表。

或者...

有很多0/1“列”,请考虑SETBIGINT 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。