PHP Mysql-increment-Spalte beim einfügen
Sorry, lassen Sie mich versuchen zu erklären .... Datensatz-id auto-Schritten und ist mein Primärschlüssel ..... LISTINGID bezieht sich auf die ID in einer anderen Tabelle. In dieser Tabelle 1 müssen Inkrement recordListingID für jeden Datensatz, der den gleichen LISTINGID. Meine insert-Anweisung fügt bis zu 10 Datensätze, die die gleiche LISTINGID ich brauche die recordListingID mit 1 beginnen und so weiter.
Hallo Jungs
Ich bin das einfügen von Datensätzen in die mysql von php kann es 1 oder mehrere Datensätze brauche ich eine der Spalten zu erhöhen mit dem ersten Eintrag, der 1 ist hier mein code einfügen
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '??', '$listingid')");
wo ich habe ?? die col, die Anforderungen zu erhöhen. Wie kann ich das erreichen?
Vielen Dank im Voraus!
- verwenden
auto_increment
- Verwenden Sie Auto-increment -, die für das Feld.....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die integrierte in der Auto_Increment-Funktion von MySql
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
MySql würde, erhöht sich der angegebene Bereich von 1 (Oder was auch immer festgelegten)
Können Sie verwenden Benutzer-definierte Variablen
Ändern Sie Ihre Tabelle Struktur der AUTO_INCREMENT Attribut für Ihre recordListingID Spalte, dann lassen Sie die Spalte von Ihr einfügen, um es automatisch ausfüllen mit einer inkrementellen Nummer.
I. e: mysql_query("INSERT INTO car_listing_images (recordID, recordText, LISTINGID) VALUES (", '$Dateiname', '$listingid')");
Können Sie initialisieren die variable als 1, und verwenden Sie die post-Inkrement-operator:
Ich weiß nicht, ob ich wirklich verstehe Ihre Frage.
Wenn Sie wollen, sind zu Inkrementieren, eine Spalte mit jeder Platte, es sollte definiert werden als ein AUTO_INCREMENT Spalte. Auf diese Weise, in Ihrem
INSERT
- Anweisung, wenn Sie einfügenNULL
in diese Spalte, es wird nach oben gehen, jedes mal.Alternativ könnten Sie tun
fieldname+1
, aberAUTO_INCREMENT
immer bevorzugt.Als pro meinen Kommentar, Sie könnten so etwas tun:
Ich würde noch ernsthaft empfehlen, gegen dieses, es ist eine viel viel bessere Umsetzung zu verwenden
AUTO_INCREMENT
Feld.Nach deinem letzten Kommentar möchte ich Folgendes vorschlagen. Sie werden nicht in der Lage, dies zu tun in MySQL direkt (es sei denn, Sie verwenden eine variable, aber dies kann schief gehen, wenn Sie das einfügen von mehreren RecordIDs auch).
$insert
ist leer, es ist nicht zur Arbeit gehen. Sollten Sie stattdessen einefor
Schleife mit einer bestimmten Anzahl, oder Loop-Schleife über ein Daten-array (dh. wenn die Abfrage muss ran zu kommen).++
operation muss innerhalb einer Loop-Schleife zur gleichen Zeit, dass Ihre Abfrage aufgerufen wird. Wenn das aber nicht deine genauen code und es funktioniert für Sie - Sie sind sehr willkommen 🙂Einem Vorwort: Wenn Sie brauchen, um 2 Felder erhöhen, aber sind nicht eng miteinander verknüpft, sind Sie wahrscheinlich tun es falsch. Könnte es besser sein, nicht
recordListingID
und stattdessen verwenden Sie einfach dierecordID
wie Sie wird wahrscheinlich die gleiche Anzahl.Wenn Ihre Tabellen ausgeführt
InnoDB
können Sie Transaktionen erstellen. Dann können Sie versuchen, so etwas wie dieses:Wenn Sie nicht wissen, versuchen Sie es mit einem gespeicherte Prozedur.
"WHERE LISTINGID=$listingid"
um die erste sql-Abfrage. Diese sollten in der Schleife hinzufügen von 10 Artikeln. Jedes mal, wenn Sie fügen Sie ein Element mit dem gleichenLISTINGID
es erhöht$recordListingId
. Dies wird auch ermöglichen es Ihnen, später zurückkommen und fügen Sie die Datensätze mit dem gleichenLISTINGID
zimmerreserviereung, ohne das Sie verfolgen, die Werte.ich glaube, ich weiß, was Sie waren/sind zu erreichen versucht. kann es einen besseren Weg, um es, aber, was ich Tat, war, "select max(id)+1 als nextId von Tabelle" und speichern Sie in eine variable, die ich verwendet, in den Sekundär-id-Feld, das Sie als "recordListingID."
diese Weise die erste Zeile, die Sie einfügen, wird die gleiche id und recordListingID, aber jede andere Zeile wird auto_inc id, aber die recordListingID wird der gleiche sein wie der erste.
in meiner situation, es ist nur ein Benutzer tun dies in einer Zeit, so dort ist keine Wahrscheinlichkeit von Fehlern, aber in einer multi-user-situation, möchten Sie vielleicht, dies zu ändern, um watch out für die Menschen tun-Einsätze zur gleichen Zeit. wie vielleicht der Markierung der letzten Zeile, so dass Sie Ihre Abfrage weiß, es ist abgeschlossen, so dass Sie könnte so etwas wie "select max(id)+1 als nextId from table where lastRow =1" oder so ähnlich.