Hallo,

Ik heb een kolom Sequence, deze moet per insert één erbij optellen. Dus als er maar 1 record geinsert wordt, staat er maar een keer een 1. Worden er meerdere records geinsert in één keer, komt er bv 1,2,3 te staan.
dus de kolom ziet er dan ongeveer als volgt uit:

1
2
3
4
1
2
1
2
3
1
1

Hoe kan ik bovenstaande voor elkaar krijgen zonder Auto Increment? Met behulp van php of sql?

Alvast bedankt!
Als je het hebt over meerdere records in één keer, wat bedoel je dan?
Ik versta daaronder:

INSERT INTO foo (bar)
VALUES ('fake'), ('nonsence'), ('bullocks')

Heb je auto_increment aanstaan op de kolom?
ik bedoel meerdere inserts in een keer bv:


INSERT INTO Order (OrderID, Seq) VALUES ('10001', '1')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '2')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '3')


en dan voor de volgende bijvoorbeeld:


INSERT INTO Order (OrderID, Seq) VALUES ('10001', '1')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '2')


[size=xsmall]Toevoeging op 30/10/2014 22:00:54:[/size]

Nee ik heb geen auto increment aanstaan, dit ik ook niet de bedoeling, ik wil dit via sql/php regelen maar niet via de ai
En waarom niet via auto_increment?

Anders een query maken die eerst de hoogste 'Seq' ophaalt en dat die 'Seq' met 1 verhogen bij de insert.

Zoals:

	SELECT Seg FROM order ORDER BY Seq DESC LIMIT 1

	INSERT INTO order SET OrderID = 10001, Seq = $seq + 1

ja okee, maar die seq telt bij elke serie insert weer vanaf 1, net zoals bij mijn vorig voorbeeld
Sabaton Joakim op 30/10/2014 22:06:32

En waarom niet via auto_increment?

Anders een query maken die eerst de hoogste 'Seq' ophaalt en dat die 'Seq' met 1 verhogen bij de insert.

Zoals:

	SELECT Seg FROM order ORDER BY Seq DESC LIMIT 1

	INSERT INTO order SET OrderID = 10001, Seq = $seq + 1




Die $seq in de update query komt uit de select query en heeft dus altijd de hoogste seq waar hij 1 bij op telt (heb de PHP code er niet bij gedaan, neem aan dat je dat wel weet)...

Maar nogmaals, waarom niet via auto_increment?
Okee, het is juist de bedoeling dat hij niet bij de hoogste seq op gaat tellen. Dus daarom kan auto_increment niet gebrukt worden.

Ik maak bijvoorbeeld een order en de orderartikelen krijgen die seq. Per order wil ik bij de artikelen 1,2,3 enz hebben. maak ik daarna weer een nieuwe order aan, moet hij weer vanaf 1 beginnen te tellen.
Als het tweede veld van je primary key een auto_increment-veld is, zal de teller steeds overnieuw beginnen bij 1.

create table orders (
   order_id int not null,
   seq int not null auto_increment,
   primary key (order_id,seq)
) engine=MyISAM;

insert into orders (order_id) values (10), (10), (10), (20), (20), (20);

geeft als resultaat:

order_id | seq
---------------
10       | 1
10       | 2
10       | 3
20       | 1
20       | 2
20       | 3

Op deze manier is het een stuk gemakkelijker dan zelf de waardes voor seq proberen te bepalen...
Sidenote, Willems antwoord werkt alleen met MyISAM niet met InnoDb!
Hoe schrijf je de gegevens nu weg naar de database? In een lus? Dan kun je toch (gewoon) een tellertje laten meelopen in die lus?

Ben wel benieuwd waarom je op die manier wilt nummeren.

Reageren