---
title: "Sorteringsproblem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/98805-sorteringsproblem/page2"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Jesper T"
published: "2004-03-05T18:56:09.000Z"
updated: "2004-03-10T18:41:50.000Z"
replies: 26
views: 821
page: 2
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/98805-sorteringsproblem"
---

# Sorteringsproblem

_Sida 2 av 2._

## #21 — Jesper T, 2004-03-10T07:14Z

> **Hansen skrev:**
>
> Får du några felmeddelanden?

 Nej, det id:t som skall flyttas upp/ner får lixom bara högre och högre orderid.
Om det te.x. bara finns fyra poster med parent_page_id=123, så skall värdet i orderid inte kunna överstiga 4.

Permalänk: https://www.webforum.nu/p/1295052

## #22 — Hansen, 2004-03-10T16:49Z

Kan du posta schemat över tbl_links samt lite data?

Det finns en risk att föregående statement är fel, men jag kan inte veta det utan att se hur tbl_links ser ut.

Permalänk: https://www.webforum.nu/p/1295352

## #23 — Jesper T, 2004-03-10T17:11Z

Kommer här:

```
#
# Table structure for table 'site_links'
#

CREATE TABLE site_links (  sl_pageid int(10) unsigned NOT NULL auto_increment,
 sl_parent_pageid int(11) unsigned default NULL,
 sl_linktext varchar(250) default NULL,
  sl_orderid int(11) unsigned default NULL,
  sl_url varchar(255) default '#',
  sl_menuactive enum('True','False') default 'False',
  sl_sp_relid int(10) unsigned default NULL,
  PRIMARY KEY  (sl_pageid)) TYPE=MyISAM;
```

Permalänk: https://www.webforum.nu/p/1295361

## #24 — Jesper T, 2004-03-10T17:12Z

Och här:

```
#
# Dumping data for table 'site_links'
#

INSERT INTO site_links VALUES("10", "4", "Curse of Sherwood, the", "6", "javascript:void(0);", "True", NULL);
INSERT INTO site_links VALUES("2", "1", "Commadore 64", "6", "#", "True", NULL);
INSERT INTO site_links VALUES("3", "1", "Nintendo 8-bit", "5", "#", "True", NULL);
INSERT INTO site_links VALUES("4", "2", "Adventure", "6", "#", "True", NULL);
INSERT INTO site_links VALUES("15", "2", "Platform", "5", "#", "True", NULL);
INSERT INTO site_links VALUES("6", "2", "Racing", "5", "#", "True", NULL);
INSERT INTO site_links VALUES("7", "3", "Adventure", "5", "#", "True", NULL);
INSERT INTO site_links VALUES("8", "3", "Platforms", "5", "#", "True", NULL);
INSERT INTO site_links VALUES("9", "3", "Sports", "6", "#", "True", NULL);
INSERT INTO site_links VALUES("1", "0", "Games", "6", "javascript:void(0);", "True", NULL);
INSERT INTO site_links VALUES("11", "4", "Defender of the Crown", "5", "javascript:void(0);", "False", NULL);
INSERT INTO site_links VALUES("12", "4", "Last Ninja, the", "5", "javascript:void(0);", "False", NULL);
INSERT INTO site_links VALUES("13", "1", "Spektrum", "5", "#", "False", NULL);
INSERT INTO site_links VALUES("14", "2", "Go Kart", "9", "#", "True", NULL);
```

Permalänk: https://www.webforum.nu/p/1295362

## #25 — Hansen, 2004-03-10T17:39Z

Om jag förstått det rätt, så vill du sortera *sl_pageid* under *sl_parent_pageid* med hjälp av *sl_orderid*, korrekt?

Kan jag anta att *sl_orderid* i den bifogade datan är fel och att *sl_orderid* startar på 1 och inte överstiger antal syskon/barn?

Permalänk: https://www.webforum.nu/p/1295380

## #26 — Jesper T, 2004-03-10T18:09Z

Ja, så här:

```
Games{1}(0)
    Commadore 64{1}(1)
        Sports{1}(2)
        Adventure{2}(2)
        Platforms{3}(2)
    Nintendo 8-bit{2}(1)
```

{ }= sl_orderid.
( )=sl_parentid

Permalänk: https://www.webforum.nu/p/1295399

## #27 — Hansen, 2004-03-10T18:41Z

Nu ska det nog funka :)

```
/* "age" */

  SELECT t1.sl_orderid AS me, 
         COUNT(t2.sl_orderid) AS siblings
    FROM site_links AS t1,
         site_links AS t2 
   WHERE t1.sl_pageid = 15
     AND t2.sl_parent_pageid = t1.sl_parent_pageid
GROUP BY t1.sl_pageid
```

pseudo kod

```
if direction = "up" then
  
  if me > 1 then
    // execute move left/up statement
  end if

end if

if direction = "down" then
  
  if me < siblings then
    // execute move right/down statement
  end if
  
end if
```

```
/* move left/up */

UPDATE site_links AS t1,
       site_links AS t2
   SET t2.sl_orderid = 
         CASE
           WHEN t2.sl_orderid = t1.sl_orderid THEN t1.sl_orderid - 1
           ELSE t1.sl_orderid
         END
             
  WHERE t1.sl_pageid = 15
    AND t2.sl_parent_pageid = t1.sl_parent_pageid
    AND t2.sl_orderid BETWEEN t1.sl_orderid - 1 AND t1.sl_orderid

/* move right/down */

UPDATE site_links AS t1,
       site_links AS t2
   SET t2.sl_orderid = 
         CASE
           WHEN t2.sl_orderid = t1.sl_orderid THEN t1.sl_orderid + 1
           ELSE t1.sl_orderid
         END
             
  WHERE t1.sl_pageid = 15
    AND t2.sl_parent_pageid = t1.sl_parent_pageid
    AND t2.sl_orderid BETWEEN t1.sl_orderid AND t1.sl_orderid + 1
```

Permalänk: https://www.webforum.nu/p/1295411

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/98805-sorteringsproblem/page2  
Föregående sida: https://www.webforum.nu/amne/databaser-sql/98805-sorteringsproblem.md
