是否可以在MySQL中返回表的第n个字段?

时间:2013-04-25 03:20:18

标签: php mysql

我正在尝试使用PHP在下拉菜单中填充来自单独表的某些列的数据。但是,我有很多菜单要填充,所以我没有为每个菜单创建一个特定的函数,而是想将列名(这是字段,对吧?)传递给函数。

目前我有一个菜单

function print_dropdown($query, $link){
   $queried = mysql_query($query, $link);
   $menu = '<select name="wholesaler" id="wholesaler">';
   while ($result = mysql_fetch_array($queried)) {
       $menu .= '<option value="' . $result['id'] . '">' . $result['wholesaler'] . '</option>';
   }
   $menu .= '</select>';
   return $menu;
}
...
<?php echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir);
?>

但是,我想这样做:

function get_field($table){
    $col_2 = mysql_query('SHOW COLUMNS FROM "$table" WHERE FIELD = 2');
    return $col_2;
}

function print_dropdown($query, $link){
    $queried = mysql_query($query, $link);
    $menu = '<select name="'$col_2'" id="'$col_2'">';
    while ($result = mysql_fetch_array($queried)) {
        $menu .= '<option value="' . $result['id'] . '">' . $result['$col_2'] . '</option>';
    }
    $menu .= '</select>';
    return $menu;
}

...

<?php
    get_field(wholesaler_flag);
    echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir);
?>

尝试选择每个表的第二个字段是不是很糟糕?就我而言,每个表中只有两列有关。但是,据我所知,未来理论上可以在id之后插入一个新列。有一个更好的方法吗?如果我搞砸了单引号和双引号,请原谅。还在学习。

注意:我在MySQL控制台中尝试了SHOW COLUMNS FROM wholesaler_flag WHERE FIELD = 2;。当然它不起作用,但我认为可能有一种方法可以访问它。这是我的问题涉及的具体领域。

2 个答案:

答案 0 :(得分:0)

你到底想要做什么?要从字段中选择第n行,如果您正在执行 SELECT 查询,那么将是:

SELECT * FROM table LIMIT n-1,1

但是,您在查询 SHOW COLUMNS 上执行此操作,该查询不依赖于行号。您可以选择第5行或第50行(在该查询中无论如何都不可能)并且它仍将返回相同的结果(有关表的列的信息)。

您可以轻松地将字段/表名称传递给函数并构建类似的查询。但是,在给定的示例中,鉴于PHP / SQL语法不正确,您不清楚要使用函数完成什么。

基于评论反馈编辑: 您可以编写一个函数来获取表和目标列号,然后将列名称传递给您。以下函数将获取SQL表(即“wholesaler_flag”)和所需列的编号(即示例中所述的2)。

function getColumnName($sqlTable, $targetColumn = 2) {
    $currentColumn = 1; // indicate our starting position for the column traversal

    $theQuery = mysql_query("SHOW COLUMNS FROM " . $sqlTable); // get columns from table

    // traverse columns until we reach the desired column number; return column name
    while ($theColumn = mysql_fetch_array($theQuery)) {
        if ($currentColumn == $targetColumn) {
            return $theColumn["Field"];
        }

        $currentColumn++;
    }

    return false; // returns Boolean false if column number is not found
}

可以通过以下方式调用:

$columnName = getColumnName("wholesaler_flag", 2);
// $columnName = getColumnName("wholesaler_flag"); also works since 2 is set as the function's default column

您也可以使用它来获取第3,4列等等或任何您想要的内容。只需稍加修改,您还可以返回一系列列。

答案 1 :(得分:0)

function print_dropdown($query, $link,$field0,$field1){
    $queried = mysql_query($query, $link);
    $menu = '<select name="'.$field1.'" id="'.$field1.'">';
    while ($result = mysql_fetch_array($queried)) {
        $menu .= '<option value="' . $result[0] . '">' . $result[1] . '</option>';
    }
    $menu .= '</select>';
    return $menu;
}

<?php
     echo print_dropdown("SELECT id, wholesaler FROM wholesaler_flag LIMIT 0, 10", $connect_normas_boudoir,"id","wholesaler");
?>

由于您将sql语句传递给函数,为什么不传递所需的选项id和选项值名称。有了上面的内容,你应该总是提供id作为第一列,在sql语句中将其命名为第二列,因为选项值固定为第一列,值分别设置为第二列,即$result[0]$result[1]。你可以尝试以上。感谢。