php或jquery代码根据类别更新拖放可排序

时间:2014-12-17 11:41:34

标签: php jquery mysql

我有下表:

news(id,cat_id,headline,sub_top_priority)

我创建拖放可排序列表。

它更改了数据库中的sub_top_priority列顺序。

代码工作正常,并且还更新数据库中的顺序。

但这会影响并更改数据库中所有行的顺序。

但我需要根据类别更改sub_top_priority列的顺序。

如果类别不同,则不会改变顺序。

plz建议我......如何在更新查询中应用条件。

行显示代码

<div style="border:1px solid #000; float:left; width:400px; padding:5px 4px 5px 4px; height:225px">
                <div id="contentLeft1">
                <ul>            
                <?php                  
                foreach($sub_top_select as $sub_top)
                {                       
                ?>
                <li id="recordsArray1_<?php echo $sub_top['id']; ?>"><?php echo $sub_top['headline']; ?></li>
                <?php } ?>
                </ul>
                </div>
            </div>


<!--SCRIPT TO UPDATE SUB-TOP SECTION UP-DOWN OR DRAG AND DROP OPERATION IN DATABASE.-->
<script type="text/javascript">
$(document).ready(function(){                          
    $(function() {
        $("#contentLeft1 ul").sortable({ opacity: 0.6, cursor: 'move', update: function() {
            var order = $(this).sortable("serialize") + '&change=updatesubtop'; 
            $.post("add_status_news.php", order, function(theResponse){
                $("#contentRight").html(theResponse);
            });                                                              
        }                                 
        });
    });

}); 
</script>

页面名称add_status_news.php

php代码更新数据库中的订单。

<?php
if(isset($_POST['change']))
    {   
        $change = mysql_real_escape_string($_POST['change']); 
        $updateRecordsArray1 = $_POST['recordsArray1'];
        if ($change == "updatesubtop")
        {           
            $listingCounter1 = 1;
            foreach ($updateRecordsArray1 as $recordIDValue1)
            {       
                $query1 = "UPDATE news SET sub_top_priority = " . $listingCounter1 . " WHERE id = " . $recordIDValue1;              
                mysql_query($query1) or die($query1."<br/><br/>".mysql_error());
                $listingCounter1 = $listingCounter1 + 1;
            }           

        }
    }
?>

1 个答案:

答案 0 :(得分:0)

这不是一个完整的答案,但我想利用答案窗口的格式化选项:

请考虑以下事项而不是UPDATE:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id CHAR(1) NOT NULL PRIMARY KEY, sort_order INT NOT NULL);

INSERT INTO my_table (id,sort_order) VALUES ('A',1),('B',2),('C',3),('D',4),('E',5);

SELECT * FROM my_table;
+----+------------+
| id | sort_order |
+----+------------+
|  A |          1 |
|  B |          2 |
|  C |          3 |
|  D |          4 |
|  E |          5 |
+----+------------+

INSERT INTO my_table (id,sort_order) VALUES ('A',5),('B',4),('C',3),('D',2),('E',1) ON DUPLICATE KEY UPDATE sort_order = VALUES(sort_order);

SELECT * FROM my_table;
+----+------------+
| id | sort_order |
+----+------------+
|  A |          5 |
|  B |          4 |
|  C |          3 |
|  D |          2 |
|  E |          1 |
+----+------------+

这样做的好处是可以在循环内构建查询,然后在循环外执行。在大型列表中,我怀疑这将比无限次往返数据库更快。