我从名为“9 stars”的列中选择了一些东西(没有“”)。
SELECT `9 stars` FROM `table` WHERE ...
工作正常,但我必须找到一个解决方案来完成将变量(i = 9)
与"stars"
相结合的工作,例如:
i = 9;
SELECT `i stars` FROM `table` WHERE ... (which does not work like this, of course).
答案 0 :(得分:4)
如果您想在纯Sql中执行此操作,那么对于动态列名称,您需要使用 prepare statement
SET @i =9;
SET @table = <tblname>;
SET @query = CONCAT('SELECT ',CONCAT('`',@i,' ', 'start','`'),' FROM ', @table);
PREPARE stmt FROM @query;
EXECUTE stmt;
检查这个
答案 1 :(得分:3)
如果您不想动摇构建查询并知道有多少&#34;我&#34;有价值,你可以这样做:
SET @i = whatever;
SELECT CASE @i
WHEN 1 THEN `1 stars`
WHEN 2 THEN `2 stars`
WHEN 3 THEN `3 stars`
WHEN 4 THEN `4 stars`
WHEN 5 THEN `5 stars`
WHEN 6 THEN `6 stars`
etc....
ELSE NULL
END AS `the_stars`
FROM table
WHERE ...
您还可以使用行中其他字段的值而不是会话变量(@i)
答案 2 :(得分:1)
使用 CONCAT
SET @i = 9;
SELECT CONCAT(@i, 'stars')
FROM table WHERE ...
答案 3 :(得分:0)
你可以在 MySQL 中使用 ELT 函数:
SET @i = 3;
SELECT ELT(@i, `1 stars`, `2 stars`, `3 stars`, `4 stars`[, ...]) FROM `table` WHERE [...];