Door
Dennis B
op 30-10-2014 21:04
gewijzigd op 30-10-2014 21:04
1.124 views
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?
Ik heb een andere applicatie die blijkbaar op die manier werkt bij het aanmaken van bijvoorbeeld een order. Inderdaad, de functie werkt niet, ik maak trouwens gebruik van mssql database. De gegevens worden inderdaad via een lus weggeschreven.
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.
Controleer als je in de lus een insert doet of het vorige orderid gelijk is aan het nieuwe orderid.
Is het orderid gelijk aan het vorige orderid --> teller +1, anders teller=1
Laat anders eens de code zien, waarmee je de records invoegt.
if (isset($_POST['plaatsorder'])) {
{
$query = "INSERT INTO Order (OrderID, Seq) SELECT artcode FROM winkelwagen WHERE sessionid = '".$_POST['sessionid']."'";
$result = sqlsrv_query($dbhandle,$query2);
}
}
[size=xsmall]Toevoeging op 30/10/2014 23:40:56:[/size]
Ik heb de overbodige code er uitgegooid, zodat het wat overzichtelijker is :)
[size=xsmall]Toevoeging op 30/10/2014 23:41:30:[/size]
en met de Seq wordt hier nog niets gedaan, dat snap ik dus niet
In SQL server kan je dit als volgt doen:
[code lang="sql"]
INSERT INTO [Order] (OrderID, Seq)
SELECT artcode, ROW_NUMBER() OVER (ORDER BY idcol)
FROM winkelwagen
WHERE session_id = 'xxxxxxx'
[/code]
Ik dacht dat het een loop was, dit is toch niet het geval, hij kopieert alles vanaf de winkelwagen tabel naar de order tabel.
Hieronder de volledige code:
<?php
if (isset($_POST['plaatsorder'])) {
{
$query = "INSERT INTO Order
(OrderID, Seq, QtyOrdered, ItemID)
SELECT sessionid, ........, wwartaantal, wwartcode
FROM winkelwagen
WHERE sessionid = '".$_POST['sessionid']."'";
$result = sqlsrv_query($dbhandle,$query);
}
?>
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.