Исключить определенные столбцы из SHOW COLUMNS mysql - PullRequest
7 голосов
/ 21 января 2011

У меня есть этот запрос: 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 ]

14 голосов
/ 21 января 2011

PHP Way:

Используйте continue в цикле while, когда эти поля извлекаются, например так:

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 используется внутри циклических структур, чтобы пропустить оставшуюся часть итерации текущего цикла и продолжить выполнение при оценке условия и затем начале следующей итерации.


MySQL Way:

Удалите эти поля в запросе следующим образом:

SHOW COLUMNS FROM mash WHERE Field NOT IN ('id', 'tstamp');
3 голосов
/ 21 января 2011

Да, это возможно.Вместо использования 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 голосов
/ 21 января 2011

Вы можете использовать оператор LIKE.

SHOW COLUMNS FROM mash LIKE "name%"
0 голосов
/ 02 декабря 2015

Чтобы увидеть только столбец «Сопоставление», который отображается в 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...