我有以下子查询...
SELECT column_name FROM information_schema.columns
WHERE table_schema = 'table' AND table_name = 'some_table_name'
AND column_name LIKE 'list_type_%'
...我用它来选择以list_type开头的所有列名。该值可以是白色或黑色(白名单,黑名单),但在某些情况下应默认为黑色(但不是在所有情况下 - 因为我希望默认为空 - 所以将DEFAULT值设置为黑色不是一个选项)
在这种“特定情况”中,我想迭代子查询的结果,就像我做的那样(伪代码)
foreach (result as column_name) {
if (column_name == x) {
values .= ", white"
}
else {
values .= ", black"
}
}
然后我会使用串联的列名称及其值来插入一行。有没有办法在SQL(Mysql)中做这样的事情?
或者,我可以简单地调用PHP PDO查询方法两次并在其间进行一些字符串转换,但我想这会慢一些。
答案 0 :(得分:1)
解决方案不是动态添加列,而是改变数据库结构。这是一个称为规范化的过程,你应该在构造完全不可维护的东西之前学习它。
以下是首发:http://en.wikipedia.org/wiki/Database_normalization
在您的情况下,您希望在某些表中有一些任意数量的列表类型列。你真正想要的是一个或多或少有以下列的表
您需要另一个表,每种类型的列表都有一行。此表可以随着时间的推移而增长添加行比列更容易。这就是行的用途。每当添加新列表类型时,都会在此列表类型表中添加新条目。然后,在另一个表中,您可以开始将实体与列表类型相关联。
如果您可以向我提供有关整体架构的更多信息,我可以在我的指示中更具体。