HTML表:使用mysql修改顺序

时间:2010-02-03 08:48:22

标签: javascript php mysql html-table

我有一个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'] ?>">&#x25B2;</button></td>
    <td><button id="down_<?php echo $question['question_id'] ?>">&#x25BC;</button></td>
    <td><?php echo $question['question'] ?></td>
  </tr>
...

5 个答案:

答案 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>";
?>