Hello,
Vielleicht kannst Du einen Trigger und/oder eine Subquery nutzen dafür.
Für das Insert funktioniert es so, ob es zulässig ist, weiß ich nicht:
CREATE TABLE `items` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`page` INT(11) NOT NULL DEFAULT '0',
`pos` INT(11) NULL DEFAULT '0',
`itemtype` CHAR(50) NOT NULL DEFAULT '0',
`attribs` VARCHAR(50) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE INDEX `page_pos` (`page`, `pos`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=1
;
CREATE DEFINER=`root`@`localhost` TRIGGER `items_before_insert` BEFORE INSERT ON `items` FOR EACH ROW BEGIN
set @spos = (select max(pos) from items where page = new.page);
if (isnull(@spos)) then
set new.pos = 1;
else
set new.pos = @spos + 1;
end if;
END
Was man beim Update alles noch bedenken müsste, sollst Du mal selber überlegen.
Und wenn Du dann beim Update auf die Finger geklopft bekommst vom DBMS, weil die Positionsnummer schon belegt war, dann musst Du eben vorhher eine Lücke schaffen und dann erst das Update durchführen.
Liebe Grüße
Tom S.
--
Es gibt nichts Gutes, außer man tut es
Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
Es gibt nichts Gutes, außer man tut es
Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.