我有一个MySQL表:
CREATE TABLE `Questions` (
`question_id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`question` VARCHAR(1024),
`order` INT
);
在HTML表格中显示数据时,数据的顺序按列“顺序”排序。如何使用每个表行中的某种向上/向下按钮来实现递增/递减顺序列?
...
<tr>
<td><?php echo $question['question_id'] ?></td>
<td><?php echo $question['order'] ?></td>
<td><button id="up_<?php echo $question['question_id'] ?>">▲</button></td>
<td><button id="down_<?php echo $question['question_id'] ?>">▼</button></td>
<td><?php echo $question['question'] ?></td>
</tr>
...
答案 0 :(得分:0)
将此添加到MySQL查询"(REST OF OLD QUERY HERE) ORDER BY order " . $sort;
您需要制作标记为向上/向下(或类似名称)的链接,这些链接会将参数传递给您的脚本,以便对结果进行排序。
例如:<a href="index.php?sort=>Ascending</a> <a href="index.php?sort=desc>Descending</a>
然后,在PHP脚本中,在查询之前:
$sort = ''; // Default order ascending (auto)
if ( isset ( $_GET [ 'sort' ] ) )
{
if ( $_GET [ 'sort' ] == 'desc' )
{
$sort = 'DESC';
}
}
<强>解释强>
默认情况下,MySQL会对您的结果进行升序排序,因此我们通常不会向查询添加任何内容($sort='';
)。但是,如果用户单击 Descending 链接,PHP会将$sort
设置为DESC
,MySQL会将结果降序排列!
答案 1 :(得分:0)
如果您需要手动订单,则需要在数据库中添加一列来描述该订单。可能是具有唯一性约束的整数列(您似乎已经具有该约束,但没有约束)。
然后,您可以在发出的SELECT查询中对该列进行ORDER BY。
如果要更改顺序,则需要交换要交换的行的值。 (您可能需要将一个设置为占位符值,然后将另一个设置为第一个的旧值,然后将第一个值设置为第二个的旧值。
这可以通过包含带行ID和上/下提交按钮的隐藏输入的每一行的表单来实现。然后在服务器端代码中,您可以使用行id + 1或-1交换行ID,具体取决于单击的按钮。
您可以添加JavaScript(和Ajax技术)来改善用户体验。
答案 2 :(得分:0)
您可以在ORDER BY
部分的查询中定义它,例如:
ORDER BY first_order,second_order,second_order`
但是如果你想在你的桌子上放一些按钮,你可以在你的桌子上进行动态排序,你可以使用一些 JQUERY插件你可以参考它在这里:http://tablesorter.com/docs/
答案 3 :(得分:0)
您可以使用jQuery + jQuery UI Sortable而不是订单列。请在此处查看:http://jqueryui.com/sortable
答案 4 :(得分:-2)
这个片段应该是诀窍。如有任何问题,请发表评论。
<?php
mysql_connect('localhost', 'xxxxxx', 'xxxxxxxxxxxx');
if(isset($_GET['q'])){
$qid = $_GET['q'];
$act = $_GET['act'];
$sql = "SELECT `order` FROM test.questions WHERE question_id = '$qid'";
$rs = mysql_query($sql);
$r = mysql_fetch_array($rs);
$order = $r['order'];
if($act == 'up'){
if($order == '1') break;
$up_order = $order - 1;
$sql = "SELECT question_id FROM test.questions WHERE `order` = '$up_order'";
$rs = mysql_query($sql);
$r = mysql_fetch_array($rs);
$up_order_id = $r['question_id'];
$sql = "UPDATE test.questions SET `order` = '$up_order' WHERE question_id = '$qid'";
mysql_query($sql);
$sql = "UPDATE test.questions SET `order` = '$order' WHERE question_id = '$up_order_id'";
mysql_query($sql);
} else if($act == 'down'){
$sql = "SELECT MAX(`order`) as `order` FROM test.questions";
$rs = mysql_query($sql);
$r = mysql_fetch_array($rs);
$max_order = $r['order'];
if($order == $max_order) break;
$down_order = $order + 1;
$sql = "SELECT question_id FROM test.questions WHERE `order` = '$down_order'";
$rs = mysql_query($sql);
$r = mysql_fetch_array($rs);
$down_order_id = $r['question_id'];
$sql = "UPDATE test.questions SET `order` = '$down_order' WHERE question_id = '$qid'";
mysql_query($sql);
$sql = "UPDATE test.questions SET `order` = '$order' WHERE question_id = '$down_order_id'";
mysql_query($sql);
}
$sql = "";
}
$sql = "SELECT * FROM test.questions ORDER BY `order`;";
$rs = mysql_query($sql);
echo "<table>";
while(false !== ($r = mysql_fetch_array($rs))){
echo "<tr>";
echo "<td>$r[question_id]</td>";
echo "<td>$r[question]</td>";
echo "<td>$r[order]</td>";
echo "<td><a href='?q=$r[question_id]&act=up'>UP</a> - <a href='?q=$r[question_id]&act=down'>DOWN</a></td>";
echo "</tr>";
}
echo "</table>";
?>