我正在尝试在我的Mysql数据库中添加一个列,该列对所有以'tokenvalid'开头的列进行求和,其值可以取值为1或0.
让我说我的数据库中有50列(即tokenvalid1,tokenvalid2 ....,tokenvalide50),其他列之间。
请在下面找到我想要实现的代码。我知道这根本不正确,但它只是让你知道我想要做什么。 谢谢您的帮助!
'SELECT *, sum(column_name LIKE "tokenvalid"%) as total FROM points WHERE 1'
答案 0 :(得分:0)
这篇文章可以帮到你。该文章描述了如何获取列,然后查询结果。
答案 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;