我有这样的查询: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>";
答案 0 :(得分:14)
在获取这些字段时,在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>";
这将跳过id
和tstamp
字段并处理所有其他字段。在循环结构中使用continue
来跳过当前循环迭代的其余部分并在条件评估时继续执行,然后在下一次迭代的开始处继续执行。
删除查询中的字段,如下所示:
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';