我有一个mysql表,我通过PHP查询它。查询如下所示
SELECT min(Age) , max(Age) , min(Workexp) , max(Workexp) FROM data_table
根据用户的选择,它可能必须返回更多或更少的最小/最大对,但它总是只返回1行。
如果列数不变,我可以简单地使用下面的结果将结果存储在一个数组中并使用它。
$result=mysql_query($sql);
while ($obj = mysql_fetch_object($result))
{$SelFieldNameArray[] = array('field_name1' => $obj->field_name1, 'field_name2' => $obj->field_name2);}
但是由于列数可变,我无法在此处执行此操作。有人可以帮我解决这个问题。谢谢。
答案 0 :(得分:3)
您可以将结果作为关联获取并使用它。
while ($result = mysql_fetch_assoc($result)) {
$SelFieldNameArray[] = $result;
}
答案 1 :(得分:3)
首先:请切换为使用mysqli_ *,因为mysql_ *已被弃用。
尝试此查询,定义最小和最大选择的属性名称
选择 min(年龄)AS minAge, 最大(年龄)AS maxAge, min(Workexp)AS minWorkexp, max(Workexp)AS maxWorkexp FROM data_table
现在你的1行应该有4列开头,应该有以给定属性名称命名的4个属性。
因此,当作为关联数组(即使用mysqli_fetch_assoc)请求时,您可以直接访问它们:
$result = mysqli_fetch_assoc($query);
echo 'minAge = '.$result['minAge']
.'maxAge = '.$result['maxAge']
.'minWorkexp = '.$result['minWorkexp']
.'maxWorkexp = '.$result['maxWorkexp'];
要将其作为对象提供给您,请使用mysqli_fetch_object:
$result = mysqli_fetch_object($query);
echo 'minAge = '.$result->minAge
.'maxAge = '.$result->maxAge
.'minWorkexp = '.$result->minWorkexp
.'maxWorkexp = '.$result->maxWorkexp;
答案 2 :(得分:1)
您的问题是您在查询中选择动态列数。
您可以通过以下方式检索它们:
$SelFieldNameArray = array();
//MYSQL_NUM retrieves all your rows in numbered indexes so you can
//easily loop through them
$row = mysql_fetch_array($sql,MYSQL_NUM);
foreach($row as $k=>$v) {
$SelFieldNameArray[] = array('field_name'.($k+1)=>$row[$k]);
}
输出:
array
0 =>
array
'field_name1' => 5
1 =>
array
'field_name2' => 10
//...etc.
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 3 :(得分:1)
首先,如果它只返回一行,则不需要while。其次,您可以使用mysql_fetch_assoc来获取列名和值。例如:
$sql = "SELECT min(Age) , max(Age) , min(Workexp) , max(Workexp) FROM data_table";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$columns = array_keys($row);
print_r($columns); //prints the column names
echo $columns[2]; //prints the name of the third column
echo count($columns); //prints total number of columns
print_r($row); //prints all columns and their values
echo $row[$columns[2]]; //prints what is in the third column
foreach ($row as $key=>$value) {
echo $key.":".$value; //prints min(Age):1 for example
}
注意:不要使用 mysql _ 功能,因为它们已被弃用。