迭代MySql子查询

时间:2013-05-05 17:50:17

标签: php mysql sql 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开头的所有列名。该值可以是白色或黑色(白名单,黑名单),但在某些情况下应默认为黑色(但不是在所有情况下 - 因为我希望默认为空 - 所以将DEFAULT值设置为黑色不是一个选项)

在这种“特定情况”中,我想迭代子查询的结果,就像我做的那样(伪代码)

foreach (result as column_name) {
 if (column_name == x) {
  values .= ", white"
 }
 else {
  values .= ", black"
 }
}

然后我会使用串联的列名称及其值来插入一行。有没有办法在SQL(Mysql)中做这样的事情?

或者,我可以简单地调用PHP PDO查询方法两次并在其间进行一些字符串转换,但我想这会慢一些。

1 个答案:

答案 0 :(得分:1)

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

以下是首发:http://en.wikipedia.org/wiki/Database_normalization

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

  • item_key
  • list_type_key

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

如果您可以向我提供有关整体架构的更多信息,我可以在我的指示中更具体。