[英]Search mySQL table for string and return the name of the field it is in
[英]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.