繁体   English   中英

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

[英]Is it possible to return the nth field of a table in 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之后插入一个新列。 有一个更好的方法吗? 如果我提高了单引号和双引号,请原谅。 还在学习。

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

您到底想做什么? 要从字段中选择第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列等。 稍作修改,您也可以使其返回一定范围的列。

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和选项值名称。 有了上述内容,由于选项值固定为第一列,值固定为第二列,即$result[0]$result[1]在sql语句中应始终提供id作为第一列,名称作为第二列。尝试以上。 谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM