-1

我有以下子查询...

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 查询方法两次,并在两者之间进行一些字符串转换,但我想这会更慢。

4

1 回答 1

1

解决方案不是动态添加列,而是更改您的数据库结构。这是一个称为规范化的过程,您现在应该在构建完全无法维护的东西之前学习它。

这是一个启动器:http ://en.wikipedia.org/wiki/Database_normalization

在您的情况下,您希望在某个表中有任意数量的列表类型列。您真正想要的是一个或多或少具有以下列的表格

  • item_key
  • list_type_key

您将需要另一个表,其中每种类型的列表都有一行。该表会随着时间的推移而增长。添加行比添加列更容易。这就是行的用途。每当您添加新的列表类型时,都会在此列表类型表中添加一个新条目。然后,在您的另一个表中,您可以开始将实体与列表类型相关联。

如果你能给我更多关于你的整体架构的信息,我可以更具体地说明我的方向。

于 2013-05-05T18:04:42.793 回答