我希望,使用php代码,按列名命令mysql查询表(“动态”采用 - 列名不固定)。 该脚本仅从查询中获取每列的正确列名。
...等...连接到db ..
$query = "SELECT a.name,a.surname,b.email,c.phone
FROM users as a
inner join users_email as b
inner join users_phone as c
WHERE a.id=b.id AND a.id=c.id ";
if (isset($_GET['orderby'])&&
(($_GET['orderby']=='name') || ($_GET['orderby']=='surname')||($_GET['orderby']=='email')))
{
$query .= "ORDER BY" . $_GET['orderby'] . "ASC;";
}
$result = mysql_query($query,$con);
echo "<table><table border=1><tr>";
for($i=0; $i < mysql_num_fields($result); $i++){
$field_info = mysql_fetch_field($result, $i);
echo '<th><a href="login3.php?orderby='. $field_info -> name .'" >'. $field_info -> name .'</a></th>';
}
while ($row=mysql_fetch_assoc($result)){
echo "<tr>";
foreach($row as $_column){
echo "<td>{$_column}</td>";
}
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
答案 0 :(得分:0)
我还没有测试过,但这样的事情可能有用:
$sort = 'your_field_to_sort';
while (($row = $result->fetch_assoc())) {
$data[] = $row;
}
usort($data, function($a, $b) use ($sort) {
if ($a[$sort] == $b[$sort]) {
return 0;
}
return ($a[$sort] < $b[$sort]) ? -1 : 1;
});
此示例假设您使用的是mysqli,您应该优先使用旧的已弃用的mysql函数。
如果您仍想坚持旧API,请使用mysql_fetch_assoc:
[...]
while (($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
[...]
答案 1 :(得分:0)
由于我正在使用PDOhere,我将为您提供连接模板(插入您使用的变量名称与mysql_conn()并完成):
//try connecting to database
try
{
$dbconn_pdo = new PDO(
'mysql:host=' . $host . ';dbname=' . $db . ';charset=utf8', $user, $password,
array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
)
);
}
//catch exception, if connection failed
catch (PDOException $e)
{
echo ("Error: cannot connect to database<br/>");
die();
}
根据您的示例,要对表进行排序,您可以从链接中获取需要排序的列名(稍后将构建它),因此查询变为:
$query = "SELECT a.name,a.surname,b.email,c.phone
FROM users as a
inner join users_email as b
inner join users_phone as c
WHERE a.id=b.id AND a.id=c.id";
我们在这里检查订购:
if (isset($_GET['orderby']) &&
(($_GET['orderby'] == 'name') || ($_GET['orderby'] == 'surname') || ($_GET['orderby'] == 'email') || ($_GET['orderby'] == 'phone')))
{
$query .= " ORDER BY " . $_GET['orderby'] . " ASC; ";
}
要获取查询结果,请使用:
$result = $dbconn_pdo->query($query);
现在,列名已经从查询本身中获知,因此无需调用函数来检索它们(如果您真的需要该功能,请查看http://www.php.net/manual/en/pdostatement.getcolumnmeta.php):
?>
<table><table border=1>
<tr>
<th><a href="so-wwwglro.php?orderby=name">Name</a></th>
<th><a href="so-wwwglro.php?orderby=surname">Surame</a></th>
<th><a href="so-wwwglro.php?orderby=email">Email</a></th>
<th><a href="so-wwwglro.php?orderby=phone">Phone</a></th>
</tr>
<?php
然后,当然,您获取行来创建表;唯一一个被改变的行就是“while”(毕竟我们正在使用PDO):
while ($row = $result->fetch(PDO::FETCH_ASSOC))
然后,你只需创建你的表,它就像你的例子:
{
echo "<tr>";
foreach($row as $_column)
{
echo "<td>{$_column}</td>";
}
echo "</tr>";
}
echo "</table>";
相反,如果你想动态地对列进行排序而不重新加载页面,你应该使用Javascript,但这是完全不同的事情:)
编辑:从mysql_ *更改为PDO,这样我们就不会“支持”已弃用的函数。