Mysql将所有列与一些字母开头相加

时间:2017-07-04 19:51:01

标签: mysql

我正在尝试在我的Mysql数据库中添加一个列,该列对所有以'tokenvalid'开头的列进行求和,其值可以取值为1或0.

让我说我的数据库中有50列(即tokenvalid1,tokenvalid2 ....,tokenvalide50),其他列之间。

请在下面找到我想要实现的代码。我知道这根本不正确,但它只是让你知道我想要做什么。 谢谢您的帮助!

'SELECT *, sum(column_name LIKE "tokenvalid"%) as total FROM points WHERE 1'

3 个答案:

答案 0 :(得分:0)

这篇文章可以帮到你。该文章描述了如何获取列,然后查询结果。

MySQL Like statement in SELECT column_name

答案 1 :(得分:0)

这样的事情可以帮助你。

SET @colname = (SELECT GROUP_CONCAT(`column_name`) from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='points' AND `column_name` LIKE 'tokenvalid%');
SET @table = 'points';
SET @query = CONCAT('SELECT SUM(',@colname,') FROM ', @table);
PREPARE stmt FROM @query;
EXECUTE stmt;

类似于this

RocketDonkey回答

答案 2 :(得分:0)

如果该字符串在您的外部应用程序(例如PHP)中,请确保只构造MySQL语句。

如果字符串在MySQL表中,则不能。 MySQL没有eval()或此类函数。以下是不可能的:

假设您有一个表“ queries”,其中的字段“ columnname”引用了表“ mytable”中的列名之一。 “查询”中可能还有其他列,可让您选择所需的列名...

INSERT INTO queries  (columname) VALUES ("name")
SELECT (select columnname from queries) from mytable

不过,您可以使用PREPARED STATEMENTS。请注意,这很hacky。

SELECT columnname from queries into @colname;
SET @table = 'mytable';
SET @s = CONCAT('SELECT ',@colname,' FROM ', @table);

PREPARE stmt FROM @s;
EXECUTE stmt;