Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql使用串联字符串从列中选择_Mysql - Fatal编程技术网

mysql使用串联字符串从列中选择

mysql使用串联字符串从列中选择,mysql,Mysql,我从一个名为“9颗星”的列中选择了一些东西(没有“) 工作正常,但我必须找到一个解决方案,将变量(I=9)与“stars”相结合,类似于: i = 9; SELECT `i stars` FROM `table` WHERE ... (which does not work like this, of course). 使用 SET @i = 9; SELECT CONCAT(@i, 'stars') FROM table WHERE ... 如果您想在纯Sql中执行此操作,那么

我从一个名为“9颗星”的列中选择了一些东西(没有“)

工作正常,但我必须找到一个解决方案,将变量
(I=9)
“stars”
相结合,类似于:

i = 9;  
SELECT `i stars` FROM `table` WHERE ...  (which does not work like this, of course).
使用

SET @i = 9;
SELECT CONCAT(@i,  'stars') 
FROM table WHERE ... 

如果您想在纯Sql中执行此操作,那么对于动态列名,您需要使用prepare语句

SET @i =9;
SET @table = <tblname>;
SET @query = CONCAT('SELECT ',CONCAT('`',@i,' ', 'start','`'),' FROM ', @table);

PREPARE stmt FROM @query;
EXECUTE stmt;
SET@i=9;
设置@table=;
设置@query=CONCAT('SELECT',CONCAT('`',@i','start','FROM',@table);
从@query准备stmt;
执行stmt;
检查这个


如果您不想在动态构造查询时乱来,并且知道有多少个“i”值,您可以这样做:

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)

我尝试过,但由于选择,我没有得到行的值,而是“9星”(不带“”)没有“”意味着什么?结果是一场灾难string@JuanCarlosOropeza他想动态选择他正在选择的字段。@uEER我知道动态查询,但在问题中没有看到,可能我太饿了:(@uuerdo好的,我现在看到了。你在什么环境中?这个查询是如何到达MySQL的?你的问题的可能重复非常不清楚你有什么和你需要什么导致不同的答案。你为什么嵌套
CONCAT
?只是为了向他/她展示我们可以通过多个变量进行动态查询,然后我们可以执行。@JuanCarlosOropeza这有点奇怪,但不应该影响结果;但是您确实让我注意到developerCK应该在字段周围包含
`
SELECT 9 start from sometable
不会按需工作。我的意思是您可以在一个
concat
中包含多个变量,因此不需要嵌套。或者这里有一个变量数量的限制?一个更简单的
CONCAT
是:
CONCAT('SELECT`',@i',stars`FROM',@table);
我本来也要写这个,但现在正在吃我的水果:)要清楚,因为格式没有显示。
1星
是一个字段名,将返回该内容。问题没有说明字段名的一致性,因此为了示例,我选择了一致性。@uuerdo,在这种情况下,您的方法似乎是最好的。开箱即用的解决方案,伟人!(我们应该让事情变得更简单而不是更复杂!)顺便说一句,我想你的意思是
用户变量
不是
会话变量
这对于数量有限的列是很好的,但是如果超过5或6列,可能会很快变得混乱。
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 ...