2010-02-03 41 views
0

修改次序我有一个MySQL表:HTML表:用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> 
... 
+1

不清楚的问题 – ariefbayu 2010-02-03 10:28:51

回答

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='';)。但是,如果用户点击降序链接,PHP设置$sortDESC和MySQL将责令你的结果下降!

+0

如果您的字段实际上被称为'订单',则需要在订单周围包含反引号' – MalphasWats 2010-02-03 09:25:06

+0

hmm,发送过早,抱歉。 'order'是一个mysql关键字,反引号将其标记为字段名称。 – MalphasWats 2010-02-03 09:25:40

+0

没问题,我虽然之前也加了引号。 – lamas 2010-02-03 09:49:38

0

如果你想手动排序,那么你将需要添加一列到数据库中描述的顺序。可能是一个唯一性约束的整数列(你似乎已经有了,约束没有了)。

然后可以ORDER BY在您发出SELECT查询该列。

当你想改变顺序,你需要换你想换行的值。 (您可能需要将其中一个设置为占位符值,然后将另一个设置为第一个值的旧值,然后将第一个值设置为旧值)。

这可以与用于包含与行ID的隐藏的输入每一行的形式来实现,并且向上/向下提交按钮。然后在服务器端代码中,您可以根据点击哪个按钮,将行ID与行ID + 1或-1交换。

你可以添加JavaScript(和Ajax技术),以改善用户体验。

-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>"; 
?> 
+0

是的,大卫多华德所说的。我需要一个用户界面来手工排序表格而不是排序列。无论如何,谢谢 – Xin 2010-02-03 10:15:59

+0

是的,我意识到SQL注入问题和其他一些安全问题。但是,这不是问题。从描述中:有一种方法可以使用按钮对“订单”进行更改(向上/向下),然后更新数据库中的订单?他/她想更新字段“订单”而不是如何订购他的问题! – ariefbayu 2010-02-03 10:16:35

+0

@Xin:我的回答不是关于对列进行排序。这是关于改变表格/问题的顺序。 – ariefbayu 2010-02-03 10:17:35

0

你可以在查询中ORDER BY部分定义它,如:

ORDER BY first_order,second_order,second_order` 

BUT!如果你想有类似的表格中的按钮,你可以对你的表动态排序,你可以使用一些jQuery插件,你可以在这里是指它:http://tablesorter.com/docs/