Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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连接字符串,行值作为select查询中每一行的列名(仅按查询)_Mysql_Concatenation - Fatal编程技术网

mysql连接字符串,行值作为select查询中每一行的列名(仅按查询)

mysql连接字符串,行值作为select查询中每一行的列名(仅按查询),mysql,concatenation,Mysql,Concatenation,下面是我的桌子 id colname1 colname2 colname3 1 Alex John Mary 2 Alyssa Eben Stephen 3 Sandra Tina William 我尝试使用下面的查询 SELECT * FROM TABLE WHERE CONCAT('colname',id) = 'Eben' 我希望结果来自第二行第二列。但我什么也得不到。我参考了

下面是我的桌子

id   colname1   colname2     colname3
1    Alex       John         Mary
2    Alyssa     Eben         Stephen
3    Sandra     Tina         William
我尝试使用下面的查询

SELECT * FROM TABLE WHERE CONCAT('colname',id) = 'Eben'
我希望结果来自第二行第二列。但我什么也得不到。我参考了许多指导使用GROUP_CONCAT的解决方案,但我没有得到任何效果。
使用mysql可以做到这一点吗?

您可以尝试使用动态sql。使用选择填充字符串变量,例如: 声明@str varchar(50)='从表中选择*colname@id='''+'埃本'+''' 然后将占位符字符串(“@id”)替换为所需的列号,例如: 选择替换(@str,@id',2)

最后,要实际执行该语句,只需使用“EXEC”+语句。即:
EXEC(@str)

我必须创建另一个答案,因为这个论坛不允许我在评论中使用@(符号)

    DECLARE @str varchar(50) = 'SELECT * FROM TABLE WHERE colname@id = ''' +    
    'EBEN' + '''' 
    select @str = REPLACE(@str, '@id', 2)
    select @str '@str'  --This is just to examine the code, get the results of     
     --this and run it to test
--you should get this: SELECT * FROM TABLE WHERE colname2 = 'EBEN'
EXEC (@str) --this will actually execute your code

这不起作用的原因是它将
CONCAT('colname',id)
视为字符串,而不是实际的列名称。因此,因为'colname1'='Eben'始终为false,所以不会得到任何结果。还不确定解决方案是什么,这就是为什么我没有回答的原因,但希望了解它失败的原因将有助于哈哈。谢谢。我会尝试其他方法。我也会做一些研究,找到答案后发布答案。我发现了这个方法,如果您要查找特定的id值,它会起作用,但在整个表中检查有点棘手:看起来像我预期的那样。试了几次。在得到解决方案之前,我们将进行更多的尝试。我假设您希望能够通过将“colname”与ID连接起来引用某个列。抱歉,Geoffrey。我的意思是“你是对的”,我希望能够通过“colname”连接ID引用某个列。但是。。并不是说这个解决方案对我有效。但使用提供的代码,您可以做到这一点(通过替换字符串“@id”)。请告诉我哪里缺少答案-实际上,我不确定如何执行您的代码,因为它显示“[Err]1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在“DECLARE@str varchar(50)=”附近使用的正确语法,从表中选择*colname@id='''+'Eben''在第1行。上面的查询可以在navicat中使用,还是应该在php中使用?因为我仍然会遇到同样的错误。我问上述问题是因为我只熟悉过程式mysqli查询,并且我不经常使用面向对象的方式,以及为什么我不能成功运行您给出的解决方案。现在我有了这段代码<代码>$con=newpdo(“mysql:host=10.10.10.10;dbname=TABLE”,“root”,”root@123"); $query=$con->prepare(“DECLARE@str varchar(50)=”从表中选择*colname@id='''+'EBEN'+''选择@str=REPLACE(@str,@id',2)选择@str'@str'EXEC(@str)”)$查询->执行()$结果=$query->fetchall()//echo$result[“id”];foreach($result as$key=>$value){echo$key.=“$value;}echo count($result)$con=null。此代码运行,但不提供任何信息。计数显示为零。我可能错在哪里?对不起,我不熟悉您正在使用的语言(我想是PHP),但是您可以一次运行一个sql步骤吗?当然,您不需要在sql中使用这段代码:select@str'@str'。另外,如果在语句中$query=$con->prepare。。。你就不能使用某种类型的字符串变量,这样你就只需要替换那里的字符串,而不是sql?我想你可以用命令行sql来指导我。如果是这样的话,我应该提高我的知识来做到这一点。