首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给我猜个谜语。PHP脑筋急转弯,可排序,可编辑的表格

给我猜个谜语。PHP脑筋急转弯,可排序,可编辑的表格
EN

Stack Overflow用户
提问于 2011-08-14 05:22:37
回答 1查看 160关注 0票数 1

我有一张是editablesortable的桌子。该表具有父项和子项两种类型。我希望用户能够在两者之间切换,并在两者之间拖动,同时更新订单。数据库表如下所示。

代码语言:javascript
复制
+-------------------------------------------------------+-----------+
|id | userid  | item            | parent | item order   | parent_id |
+-------------------------------------------------------+-----------+
|23 | 5       | cheese burger   |false   |     2        |    128    |
+-------------------------------------------------------+-----------+
|128| 5       | Burgers         |True    |     0        |    0      |
+-------------------------------------------------------+-----------+
|10 | 5       | Hamburger       |false   |     1        |    128    |
+-------------------------------------------------------+-----------+
|25 | 5       | steak burger    |false   |     3        |    128    |
+-------------------------------------------------------+-----------+
|90 | 5       | fish   burger   |false   |     4        |    128    |
+-------------------------------------------------------+-----------+
|29 | 5       | fries           |True    |     5        |     0     |
+-------------------------------------------------------+-----------+
|22 | 5       | cheese Fries    |false   |     6        |     29    |
+-------------------------------------------------------+-----------+
|987| 5       | french fries    |false   |     7        |     29    |
+-------------------------------------------------------+-----------+

这会给我一个这样的菜单……

代码语言:javascript
复制
BURGERS
Hamburger
Cheese burger
Steak burger
Fish burger
FRIES
Cheese fries
French fries

表示标题的大写字母*

我可以把订单做好,没问题。我的脚本POST是项目顺序的数组。

代码语言:javascript
复制
 Array
 (
   [0] => 128
   [1] => 10
   [2] => 23
   [3] => 25
   [4] => 90
   [5] => 29
   [6] => 22
   [7] => 987
)

然后我更新数据库以反映这一点,类似于此...

代码语言:javascript
复制
 UPDATE menu SET item_order = '0' WHERE item = '128'
 UPDATE menu SET item_order = '1' WHERE item = '10'
 UPDATE menu SET item_order = '2' WHERE item = '23'
 UPDATE menu SET item_order = '3' WHERE item = '25'
 UPDATE menu SET item_order = '4' WHERE item = '90'
 UPDATE menu SET item_order = '5' WHERE item = '29'
 UPDATE menu SET item_order = '6' WHERE item = '22'
 UPDATE menu SET item_order = '7' WHERE item = '987'

我遇到的问题是如何正确地获取家长id。我尝试了各种疯狂的方法,找到了parent ID,然后做了一件类似< >的事情,但似乎没有一种方法能让它始终正确。你可以拖动一个头部,这会把孩子们搞砸。也就是说,所有的孩子都将采用拖拽的标题。您将如何处理此问题?当添加一个新项目或拖动一个项目时,就会发生上述更新。

编辑

这似乎起作用了......

代码语言:javascript
复制
 $order = "SELECT itemOrder, itemId, header from menuItems && user = $user order by itemOrder"; 
    $order_query = mysql_query($order);
    while($order_result = mysql_fetch_array($order_query))
        {
        $parent = $order_result['header'];
        if ($parent == 'true')
            {
            $current_parent = $order_result['itemId'];  
            }   
            $item_id = $order_result['item_id'];
            $parent_update = "UPDATE menuItems SET parent = '$current_parent' WHERE itemId = $itemId";
          mysql_query($parent_update);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-14 05:31:20

由于菜单可能不是层次结构,我想知道有两个表,一个包含标题,另一个包含项目,不是更容易吗?

不过,这对这个解决方案不会有太大影响。

关于parentid:

假设每个不是父项本身的项目都应该有一个父项,您可以按投递顺序遍历所有项目,并应用以下(伪代码)逻辑:

代码语言:javascript
复制
$parentId = null;

loop through items:
  if item->type == header:
     set $parentId to item->id
     update sort order
  else (item is.. well, item)
     check if $parentId !== null. Fail otherwise (item above first header)
     update sort order and parentId
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7053362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档