我有以下子查询…
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开头的列名。该值可以是白色或黑色(白名单,黑名单),但在某些情况下应该默认为黑色(但不是在所有情况下-因为我希望默认值为空-所以设置默认值为黑色不是一个选项)。
在这种"特定情况"下,我希望遍历子查询的结果,就像我做的那样(伪代码)
foreach (result as column_name) {
if (column_name == x) {
values .= ", white"
}
else {
values .= ", black"
}
}
然后,我将使用列名及其值的串联字符串来插入一行。有什么办法做这样的事情在SQL(Mysql)?
或者,我可以简单地调用PHP PDO查询方法两次,并在其间进行一些字符串转换,但我认为这会更慢。
解决方案不是动态添加列,而是更改数据库结构。这是一个叫做规范化的过程,在你构造一些完全不可维护的东西之前,你现在应该学习它。
这是一个开始:http://en.wikipedia.org/wiki/Database_normalization
在您的示例中,您希望在某个表中具有任意数量的列表类型列。您真正想要的是一个或多或少具有以下列
的表- item_key
- list_type_key
您将需要另一个表,每种类型的列表各有一行。这个表可以随着时间的推移而增长。添加行比添加列容易。这就是行的作用。每当添加新的列表类型时,都会在此列表类型表中添加一个新条目。然后,在另一个表中,您可以开始将实体与列表类型关联。
如果你能给我更多关于你的总体方案的信息,我可以在我的方向上更具体。