Mysql对所有以字母开头的列求和

Mysql对所有以字母开头的列求和,mysql,Mysql,我正在尝试在我的Mysql数据库中添加一列,该列对所有以“tokenvalid”开头的列求和,该值可以为1或0 假设我的数据库中有50个这样的列(即tokenvalid1、tokenvalid2….、TokenValid50),其他列在它们之间 请在下面找到我想要实现的代码。我知道这一点都不正确,但这只是给你一个想法,我想做什么。 谢谢你的帮助 'SELECT *, sum(column_name LIKE "tokenvalid"%) as total FROM points WHERE 1'

我正在尝试在我的Mysql数据库中添加一列,该列对所有以“tokenvalid”开头的列求和,该值可以为1或0

假设我的数据库中有50个这样的列(即tokenvalid1、tokenvalid2….、TokenValid50),其他列在它们之间

请在下面找到我想要实现的代码。我知道这一点都不正确,但这只是给你一个想法,我想做什么。 谢谢你的帮助

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

这篇文章应该对你有帮助。这篇文章描述了如何获取列,然后查询结果


像这样的东西应该会对你有所帮助

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;

与answerby类似,如果字符串在外部应用程序(如PHP)中,则只需构造MySQL语句即可

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

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

INSERT INTO queries  (columname) VALUES ("name")
SELECT (select columnname from queries) from mytable
但是,您可以使用。请注意,这是非常黑客

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

PREPARE stmt FROM @s;
EXECUTE stmt;

这样的模式违反了of,所以这可能是您的问题的根源。您不能对随机列名求和,通常每个
sum()
调用只选择一个。