从SHOW COLUMNS mysql中排除某些列

时间:2011-01-21 13:06:44

标签: php mysql select while-loop

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

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>";

4 个答案:

答案 0 :(得分:14)

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');

答案 1 :(得分:3)

是的,这是可能的。而不是使用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%'";

信息架构的优点是符合SQLANSI标准。您可以在MySQL,PostgreSQL,SQLServer和其他关系数据库中使用它。

答案 2 :(得分:2)

您可以使用LIKE运算符。

SHOW COLUMNS FROM mash LIKE "name%"

答案 3 :(得分:0)

要查看仅在一个字段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';