是否可以这样做:
SELECT template_id as id FROM templates WHERE ? IN template_allowed_parent_templates
所以我想看看给定的 ID 是否在列中。 如果没有,我该如何仅使用 MySQL 来解决这个问题?
最佳答案
就在 MySQL 中将列名作为参数传递(标题中的问题)而言,这在 SQL 语句中是不可能的。 SQL 语句中的标识符(例如表名和列名)必须是 SQL 文本的一部分。这些不能通过绑定(bind)占位符传入。
IN
比较运算符需要一个包含在括号中的值列表,或者一个包含在括号中并返回一组值的 SELECT 查询。
不清楚您要做什么。
我怀疑 template_allowed_parent_templates
是表中的一列,它包含一个逗号分隔的值列表。 (不寒而栗。)
我怀疑您可能正在寻找 MySQL FIND_IN_SET
字符串函数,它将“搜索”以逗号分隔的列表中的特定值。
作为一个简单的演示:
SELECT FIND_IN_SET('5', '2,3,5,7')
, FIND_IN_SET('4', '2,3,5,7')
当“找到”指定值时,该函数返回一个正整数。您可以在谓词中使用该函数,例如
WHERE FIND_IN_SET(id,template_allowed_parent_templates)
或
WHERE FIND_IN_SET( ? ,template_allowed_parent_templates)
(这是有效的,因为在 MySQL 中,正整数在 bool 上下文中被评估为 TRUE。)
我只是在猜测你想要完成什么。
关于mysql - 在 MySQL 中将列名作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35879772/