【问题标题】:Exclude certain columns from SHOW COLUMNS mysql从 SHOW COLUMNS mysql 中排除某些列
【发布时间】:2011-06-13 03:31:14
【问题描述】:

我有这个查询:SHOW COLUMNS FROM mash 在我的 while 循环中工作正常,用于构建由表列名称组成的选择元素。但是在我的表中,我在选择元素中有我不想要的“id”和“tstamp”,这可以排除这些列吗?

echo "<form action='".$_SERVER['PHP_SELF']."' method='get'>";
            connectDB();
            $result = mysql_query("SHOW COLUMNS FROM mash") or die(mysql_error());
            echo '<select name="column" class="column">';
            while ($row = mysql_fetch_array($result)) {
                echo "<option value='".$row[0]."'>".ucwords($row[0])."</option>";
            }
            closeConn();
            echo '</select>';
echo "</form>";

【问题讨论】:

    标签: php mysql select while-loop


    【解决方案1】:

    PHP方式:

    在 while 循环中使用 continue,当获取这些字段时,如下所示:

    echo "<form action='".$_SERVER['PHP_SELF']."' method='get'>";
        connectDB();
        $result = mysql_query("SHOW COLUMNS FROM mash") or die(mysql_error());
        echo '<select name="column" class="column">';
        while ($row = mysql_fetch_array($result))
        {
            if($row[0] == 'id' || $row[0] == 'tstamp')
                  continue;
            echo "<option value='".$row[0]."'>".ucwords($row[0])."</option>";
        }
        closeConn();
        echo '</select>';
    echo "</form>";
    

    这将跳过idtstamp 字段并处理所有其他字段。 continue 用于循环结构中以跳过当前循环迭代的其余部分并在条件评估处继续执行,然后开始下一次迭代。


    MySQL方式:

    删除查询中的这些字段,如下所示:

    SHOW COLUMNS FROM mash WHERE Field NOT IN ('id', 'tstamp');
    

    【讨论】:

    • @benhowdle89: uk.php.net/manual/en/control-structures.continue.php - 它跳过当前循环迭代的其余部分(在这种情况下,它将转到 while($row...))。大多数时候,精美手册确实有有用的信息。
    • @benhowdle89,我已经编辑了答案以显示 continue 的含义。
    • 感谢Shamittomar,非常详细的回复,我会牢记“继续”的未来!
    【解决方案2】:

    是的,这是可能的。不要使用SHOW COLUMNS,而是使用INFORMATION_SCHEMA

    INFORMATION_SCHEMA 是 ANSI 从关系数据库中提取元数据的方法。在 MySQL 中你可以使用:

    $sql = "select column_name from information_schema.columns c " + 
           " where c.table_schema = 'db_name' " + 
           "   and c.table_name='table_name' " + 
           "   and c.column_name like 'name%'";
    

    Information Schema 具有符合 SQLANSI 的优点。可以在 MySQL、PostgreSQL、SQLServer 等关系型数据库中使用。

    【讨论】:

      【解决方案3】:

      您可以使用 LIKE 运算符。

      SHOW COLUMNS FROM mash LIKE "name%"
      

      【讨论】:

        【解决方案4】:

        要查看 SHOW FULL COLUMNS from tablename 中仅显示一个字段的“排序规则”列,它是:

        select COLLATION_NAME from information_schema.columns
        where TABLE_SCHEMA = 'tableschemaname' and TABLE_NAME = 'tablename' and COLUMN_NAME = 'fieldname';
        

        如果您想查看所有字段名称的列,请将 fieldname 拖放到 where 中。

        要查看从 SHOW FULL COLUMNS 显示的所有可能的列名称,以便您可以选择所需的内容:

        select * from information_schema.columns 
        where TABLE_SCHEMA = 'tableschemaname' and TABLE_NAME = 'tablename' and COLUMN_NAME = 'fieldname';
        

        【讨论】:

          猜你喜欢
          • 2019-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多