webForumDet fria alternativet

Sorteringsproblem

26 svar · 742 visningar · startad av Jesper T · sida 2 av 2

Jesper TMedlem sedan nov. 20017 144 inlägg
#21

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.

HansenMedlem sedan aug. 2000374 inlägg
#22

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.

Jesper TMedlem sedan nov. 20017 144 inlägg
#23

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;
Jesper TMedlem sedan nov. 20017 144 inlägg
#24

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);
HansenMedlem sedan aug. 2000374 inlägg
#25

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?

Jesper TMedlem sedan nov. 20017 144 inlägg
#26

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

HansenMedlem sedan aug. 2000374 inlägg
#27

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
262 ms totalt · 3 externa anrop · v20260731065814-full.30151723
132 ms — hämta forumlista (db)
127 ms — hämta statistik (db)
127 ms — hämta tråd, inlägg och bilagor (db)