迭代MySql子查询


Iterate over a MySql subquery

我有以下子查询…

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

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

如果你能给我更多关于你的总体方案的信息,我可以在我的方向上更具体。