increment +1
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!
Gewijzigd op 30/10/2014 21:04:59 door Dennis B
Heb je auto_increment aanstaan op de kolom?
Code (php)
1
2
3
2
3
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '1')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '2')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '3')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '2')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '3')
en dan voor de volgende bijvoorbeeld:
Code (php)
1
2
2
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '1')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '2')
INSERT INTO Order (OrderID, Seq) VALUES ('10001', '2')
Toevoeging op 30/10/2014 22:00:54:
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
Anders een query maken die eerst de hoogste 'Seq' ophaalt en dat die 'Seq' met 1 verhogen bij de insert.
Zoals:
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:
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?
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.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
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);
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:
Op deze manier is het een stuk gemakkelijker dan zelf de waardes voor seq proberen te bepalen...
Gewijzigd op 30/10/2014 22:54:30 door Willem vp
Sidenote, Willems antwoord werkt alleen met MyISAM niet met InnoDb!
Ben wel benieuwd waarom je op die manier wilt nummeren.
Maar het probleem van het nummertje is dat ik niet weet op welke manier je het nummertje kunt bepalen en bij een nieuwe reeks bij 1 laten beginnen.
Ik begrijp niet helemaal wat het probleem is, de volgorde waarop je invoert is de volgorde waarmee je selecteert, dus het is niet nodig om een volgorde aan te geven.
Daarom dat ik het in mijn script wil regelen.
Is het orderid gelijk aan het vorige orderid --> teller +1, anders teller=1
Laat anders eens de code zien, waarmee je de records invoegt.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
if (isset($_POST['plaatsorder'])) {
{
$query = "INSERT INTO Order (OrderID, Seq) SELECT artcode FROM winkelwagen WHERE sessionid = '".$_POST['sessionid']."'";
$result = sqlsrv_query($dbhandle,$query2);
}
}
{
$query = "INSERT INTO Order (OrderID, Seq) SELECT artcode FROM winkelwagen WHERE sessionid = '".$_POST['sessionid']."'";
$result = sqlsrv_query($dbhandle,$query2);
}
}
Toevoeging op 30/10/2014 23:40:56:
Ik heb de overbodige code er uitgegooid, zodat het wat overzichtelijker is :)
Toevoeging op 30/10/2014 23:41:30:
en met de Seq wordt hier nog niets gedaan, dat snap ik dus niet
Gewijzigd op 30/10/2014 23:44:37 door Dennis B
Dennis B op 30/10/2014 23:16:44:
De gegevens worden inderdaad via een lus weggeschreven.
Hieronder de volledige code:
Code (php)
Alvast bedankt.
Gewijzigd op 31/10/2014 18:14:45 door Dennis B
Dennis B op 31/10/2014 18:13:53:
Ik dacht dat het een loop was, dit is toch niet het geval, hij kopieert alles vanaf de winkelwagen tabel naar de order tabel.
Waarom ga je gegevens kopiëren?
Los daarvan; in een winkelwagen kan, normaal gesproken, meer dan 1 product. Dus zal er wel een lus/loop zijn?
Een winkelwagen is in principe maar een tijdelijk iets, dus ik kan me voorstellen dat je bij het afrekenen de inhoud verplaatst (oftewel kopieert en verwijdert) naar een andere tabel.
Wat ik wel ernstig vind, is dat er een joekeloeris van een SQL-injection-mogelijkheid in die ene query zit waarmee je in essentie de inhoud van de winkelwagentjes van andere bezoekers ook meteen kan overhevelen naar de ordertabel.