TS: AUTO_INCREMENT müsste 2x gebraucht werden

Beitrag lesen

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.