php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Nächsten AutoIncrement Wert herausfinden?


 
christianpfeil
21-08-2004, 17:29 
 
Hallo Zusammen!

Ich würde gerne wissen wie ich mit php den nächsten AutoIncrement Wert in einer mySQL tabelle herausfinden kann. Habe das ganze bisher so gehandhabt:


#Nächsten AUTO-INCREMENT Wert herausfinden.
$id=mysql_query("SHOW TABLE STATUS LIKE 'artikel'");
$zeile0=mysql_fetch_array($id);


Leider läuft das ganze nur bei den neusten php Versionen. Ältere Versionen machen das nicht. Das Problem ist, das ich nicht immer die höchste ID in der tabelle "artikel" als ausgangspunkt für den nächsten AutoIncrement Wert nehmen kann. Wenn ich einen Artikel mit der ID 20 drinnen habe könnte man annehmen der nächste Wert wäre 21. Was aber wenn ein Artikel mit der ID 21 bereits existiert hat, gelöscht wurde, und mySQL beim nächsten Artikel nicht 21 sondern 22 nimmt?

Weiß jemand eine Lösung,
wäre sehr dankbar.

Gruss Christian

 
Abraxax
21-08-2004, 17:30 
 
print_r($zeile0);

 
christianpfeil
21-08-2004, 18:57 
 
danke, diesen befehl kannte ich bisher noch nicht. ich werde es gleich mal ausprobieren was es mir ausgibt.

gruss christian

 
asp2php
21-08-2004, 21:23 
 
Original geschrieben von christianpfeil

Ich würde gerne wissen wie ich mit php den nächsten AutoIncrement Wert in einer mySQL tabelle herausfinden kann.
wofür soll das gut sein?

 
MaxP0W3R
21-08-2004, 21:26 
 
wozu braucht man die nächste autoincrement id ?

 
jannik
21-08-2004, 22:02 
 
Auto Increment ist eh fürn *sry* Ar***!
Hab nen script, damit ich in dieser hinsicht nicht auf mysql angwiesen bin...

B2T: Aber wofür man das braucht interessiert mich auch ;)

 
goth
22-08-2004, 11:29 
 
Original geschrieben von jannik
Auto Increment ist eh fürn *sry* Ar***!
Hab nen script, damit ich in dieser hinsicht nicht auf mysql angwiesen bin...


Na ... der Grund für diese Aussage würde mich allerdings mal interessieren ... !

... lässt wohl eher auf unwissen schliessen ... !

 
DanielD
22-08-2004, 11:31 
 
wie jetzt goth ... sag bloß du wusstest nicht dass eindeutige ids in datenbanken totaler schwachsinn sind .... und sowas mit deiner erfahrung *g*

btw: Ich will [ironie] tags hier im forum ....

mfG

Damits net wie Spam aussieht, hier des Rätsels Lösung (oder jedenfalls eine Möglichkeit):
http://www.hk8.org/old_web/linux/sql/ch06_05.htm

 
Quickborner
22-08-2004, 12:05 
 
Original geschrieben von goth
Na ... der Grund für diese Aussage würde mich allerdings mal interessieren ... !

... lässt wohl eher auf unwissen schliessen ... !

nun, goth, das sehe ich anders und gebe jannik recht.

Wie vergebt ihr denn die nächste Artikelnummer, Kundennr, RG-Nummer etc.?

etwa per auto_increment? wohl kaum.

Jedenfalls überlasse ich (zumindes by mySql) die Business-Logik nicht der Datenbank.

Ich benutze auch so eine Funktion wie vermutlich jannik:
ich habe eine Tabelle nummern:
2 Spalten:
bereich | nummer
artikelnr | 1500
debitor | 70001
...
vor einem Artikel-Insert kommt: $artnr=fxgetnext("artikelnr");
(erhöht nummer für 'artikelnr' um 1 und returned den Wert);

So habe ich *vor* einem Insert die neue Nummer und kann diese in relationalen Tabellen
zu Artikel benutzen. Und so wird es bei Christian sein,
er braucht diese ID, weil er sie in anderen Tabellen referenziert.
(übrigens ist hier die Lösung :SELECT LAST_INSERT_ID() from tabelle; )

Ich benutze auto_increment, wenn überhaupt, nur für temp-Tabellen,
weil es auch nicht sehr portabel auf andere RDBMS ist.

außerdem vergeben einige mySql-Version einen ai-wert mehrfach, nachdem
der höchste gelöscht wurde; und das ist im günstigsten Fall schlecht.

Dies soll kein Streß- oder Philosophie-Post sein;
wenn jemand qualitative,sachliche Argumente gegen meine Version
vorbringt, bin ich gerne bereit, meine Arbeit umzustellen.

nice day
Quickborner

 
asp2php
22-08-2004, 12:39 
 
Original geschrieben von jannik
Auto Increment ist eh fürn *sry* Ar***!
Hab nen script, damit ich in dieser hinsicht nicht auf mysql angwiesen bin...

B2T: Aber wofür man das braucht interessiert mich auch ;)

wenn du keine Ahnung hast wovon du sprichst, dann spreche lieber nicht, denn wenn du schon soviel Ahnung hast, was soll denn dann der Thread hier: http://www.php-resource.de/forum/showthread.php?s=&threadid=43501

BTW: ** verschiebe zu SQL **

 
asp2php
22-08-2004, 12:47 
 
Original geschrieben von Quickborner

Ich benutze auch so eine Funktion wie vermutlich jannik:
ich habe eine Tabelle nummern:
2 Spalten:
bereich | nummer
artikelnr | 1500
debitor | 70001
...
vor einem Artikel-Insert kommt: $artnr=fxgetnext("artikelnr");
(erhöht nummer für 'artikelnr' um 1 und returned den Wert);
So habe ich *vor* einem Insert die neue Nummer und kann diese in relationalen Tabellen
zu Artikel benutzen.
Du speicherst sozusagen vor dem Insert der restlichen Daten schon die neue Nummer. Was passiert, wenn der User sich anders überlegt und auf Abbrechen klickt, währenddessen ein anderer User, der später dazu kam, seine Eingabe voll durchzieht. ;)

 
pekka
22-08-2004, 13:07 
 
Original geschrieben von Quickborner
nun, goth, das sehe ich anders und gebe jannik recht.

Wie vergebt ihr denn die nächste Artikelnummer, Kundennr, RG-Nummer etc.?

etwa per auto_increment? wohl kaum.

Jedenfalls überlasse ich (zumindes by mySql) die Business-Logik nicht der Datenbank.



Verlangt ja auch keiner. Aber Kundennummern, Artikelnummern und so weiter können sich ändern. Der Sinn einer AutoIncrement-ID ist die eindeutige Identifizierung eines bestimmten Datensatzes innerhalb der Datenbank, das hat mit der Business-Logik nichts zu tun. Oder was machst Du mit Kundennummern, die ein bestimmtes Format haben oder alphanumerische Zeichen enthalten? Wird daraus dann eine Varchar-ID?

Wenn jemand wirklich fundierte Argumente gegen AIs hat, bitte vortreten.

 
Quickborner
22-08-2004, 14:24 
 
Sekündchen mal, pekka:

wir müssen sauber differenzieren zwischen Artikelnummern etc., die nur den Programmierer
und die Datenbank etwas angehen (artikelnr) und im Frontend sichtbaren 'Artikelnummern',
zB artikelcode (Varchar(x), Format: $prefix.sprintf("%06d",$artikelnr).$postfix o.ä.).


Aber Kundennummern, Artikelnummern und so weiter können sich ändern


wenn jemand die Anforderung hat, daß sich interne Artikelnr ändern müssen, hat er ein
(lösbares, aber) erhebliches konzeptionelles Problem.

jemand, der die Anforderung hat, daß sich sichtbare Artikelcodes ändern sollen, hat seine
wahre Berufung noch nicht gefunden; denn diese sind auf 10000 Rechnungen gedruckt
und in 42.000.000 Papier-Katalogen unter den Produktfotos abgebildet.
[es sei denn, es gibt zB juristische Gründe hierfür]

keine Frage, auto_increment ist bequem; aber mal ehrlich: wie !ups, muß weg.

 
em-!x
22-08-2004, 15:55 
 
Warum denn das..? Nehmen wir beispielsweise ein Upload-Script. Die Dateinamen sollen wie folgt aussehen: <autoinrementwert>.<filetyp>
Wenn der komplette Dateiname jetzt in eine Spalte geschrieben werden soll, muss vorher der nächste AutoInreament gefunden werden.

 
Abraxax
22-08-2004, 16:40 
 
nein. erst eintragen in die DB , dann den vergebenen wert auslesen. die datei umbennen und ein update mit dem korrekten dateinamen machen. so ist das normal.

 
goth
23-08-2004, 02:30 
 
Original geschrieben von DanielD
wie jetzt goth ... sag bloß du wusstest nicht dass eindeutige ids in datenbanken totaler schwachsinn sind .... und sowas mit deiner erfahrung *g*
...
Damits net wie Spam aussieht, hier des Rätsels Lösung (oder jedenfalls eine Möglichkeit):
http://www.hk8.org/old_web/linux/sql/ch06_05.htm
Nein wusste ich wirklich nicht ... warum auch ... ?!
Kluge Texte kennst Du ... mit so wahren Aussagen wie "Neither MySQL nor mSQL support transactions" ... !

 
MelloPie
24-08-2004, 20:28 
 
was ne diskussion....
jeder der konzeptionell nachdenkt wird in seinem system auto werte verwenden um automatische verknuepfungen zu erstellen oder erstellen lassen und eben sprechende keys benutzen wenn sie etwas aussagen sollen , etc.

artikelnummern koennen auf milliarden rechnungen gedruckt sein und sich trotzdem aendern...

 
Quickborner
24-08-2004, 22:35 
 
Original geschrieben von MelloPie
was ne diskussion....
jeder der konzeptionell nachdenkt wird in seinem system auto werte verwenden um automatische verknuepfungen zu erstellen oder erstellen lassen und eben sprechende keys benutzen wenn sie etwas aussagen sollen , etc.

artikelnummern koennen auf milliarden rechnungen gedruckt sein und sich trotzdem aendern...

MelloPie,

mit Verlaub, du schreibst Qu*rk, halte dich doch einfach an deine Sig.

Du solltest nicht von dich auf andere schließen und damit implizieren,
daß wenn jemand es anders macht als du, nicht konzeptionell denkt.

Ich bleibe dabei, auto_increment ist redundant, es gibt nicht _eine_
plausible Begründung es zu nutzen.

Du kannst es ja gerne nutzen, aber schreibe nicht zwischen den Zeilen,
daß alle anderen Idioten sind.

auf, Mrd. Rgs und trotzdem ändern, daß ich nicht lache! Ändere mal
bei Quelle auch nur 1 (bis zu 8 Jahre alte), abgedruckte Artikelnr =>
da wirst du regreßpflichtig. Also vorher nachdenken, auf a_i verzichten,
dann muß man auch nichts ändern.

so, jetzt geh' ich in den Keller zum entspannen :motz:

nice night
Quickborner

 
goth
24-08-2004, 23:08 
 
Das mit der Redundanz ist immer so 'ne sache ... natürlich sollte sich ein Datensatz in einem ordentlich normalisierten DB-Entwurf über die in Ihm enthaltene Information eindeutig identifizieren.

Die einzige Redundante Information die ein Auto-Wert jedoch enthält ist eben jene, das dieser DS eindeutig ist ... gerade bei der Verwendung von zusammengesetzten Primärschlüssel ... oder genauer bei der Verwendung solcher als Fremdschlüssel entsteht bei genauer Betrachtung ein weitaus grösserer Bestand an redundanter Information.

Insbesondere bei der Entwicklung von Anwendungen, die unter hoher Last gefahren werden, zeigt die Erfahrung das es durchaus sinnvoll ist mit Auto-Werten zu arbeiten, da insbesondere die Verknüpfung von Tabellen (JOINS) über einen relativ kleinen numerischen Schlüssel weitaus weniger Kostenintensiv ist.

Theorie hat häufig nichts mit der Realität zu tun ... vielleicht lernst Du das schliesslich auch noch einmal ... im übrigen ... fast alle RDBMS bieten diese Funktionalitäten an ... (MySQL, MS-SQL als Autowert, PostgreSQL, Oracle, mSQL als Sequences) ... sicher sind die Entwickler dieser Systeme und auch die Verwender dieser Features weitaus dummer als Du ... und sicherlich bin ich das auch ... aber irgendwie bin ich auch fauler ... und deshalb verwende ich (meistens) Autowerte und Ihre Derivate weil ich weder Zeit noch Lust habe mir was eigenes zu entwickeln, was sicherlich auch nicht ansatzweise so genial wäre wie Du ... !

 
MelloPie
25-08-2004, 15:12 
 
@quickborner halt mal den Ball flach
Quelle mag nichts aendern andere grosse Firmen aendern schon mal Namen von lange eingefuehrten produkten...

Also mach Dich locker, ich geh mal in Keller die Waesche is fertig...
Du kannst ja solange in Deinem Quelle katalog blaettern.

 
shortie19
25-08-2004, 21:25 
 
nehme meinen Beitrag besser wieder raus

 
christianpfeil
26-08-2004, 14:09 
 
Hallo !

Solch eine interessante Diskussion wollte ich aber nicht auslösen, natürlich
braucht man AutoIncrements.

Doch zu meinem Problem:

Folgendes Stückchen Code...

$x=mysql_query("SELECT LAST_INSERT_ID() from artikel");
$y=mysql_fetch_array($x);
print_r ($y);

gibt bei mir aus:

Array ( [0] => 0 [last_insert_id()] => 0 )

Artikel hat das feld ID welches als AutoIncrement deklariert ist.

Also wäre der letze AutoIncrement Wert 0 (bei Stelle 0 im Array). Das ist quark, denn er ist 10. Was mache ich da falsch?

Ich schreibe derzeit (seit 1 1/2 Jahren) ein CMS. Darin gibt es die Möglichkeit Bilder zu Artikeln hochzuladen. Wenn ich einen neuen Artikel anlege, möchte ich das Bilder hochgeladen und bereits verkleinert (unter Nutzung der GD Library) als Vorschau angezeigt werden können. Das heißt ich lade das Bild in der Vorschau hoch, ohne das der Artikel schon in der DB steht, trage das Bild in die DB ein und lade das TempFile auf den Server (als Icon und in Originalgröße). Um das Bild jedoch in die DB eintragen zu können benötige ich den nächsten AutoIncrement Wert den dieser Artikel haben wird obwohl er noch nicht in der DB exisiert. Die letzte ID herauszufinden ist quatsch, denn wie wir alle wissen ist die letzte eingetragene ID +1 nicht gleich der nächste AutoIncrement Wert.

Bsp: Wenn ich einen Artikel habe der als AutoIncrement Wert 13 hat und dieser dann gelöscht wird hat der nächste Artikel nicht automatisch diesen Wert sondern eben 14.

Weiß jemand eine Lösung für mein Problem.
Gruß Christian

 
christianpfeil
26-08-2004, 14:15 
 
bullshit...vielleicht hätte ich vorher mal in der doku blättern sollen:

mysql_insert_id() liefert die ID, die bei der letzten INSERT-Operation für ein Feld vom Typ AUTO_INCREMENT vergeben wurde. Wenn die Verbindungs-Kennung nicht angegeben wird, wird die zuletzt geöffnete Verbindung angenommen.

mysql_insert_id() liefert 0, wenn die vorhergehende Abfrage keinen AUTO_INCREMENT Wert erzeugt hat. Falls Sie den Wert zur späteren Verwendung speichern möchten, stellen Sie sicher, dass Sie mysql_insert_id() direkt nach der Abfrage aufrufen, die einen Wert erzeugt hat.

Demnach ist dieser Befehl unbrauchbar für mich weil ich bereits mit der ersten Verbindung im Script den letzten bzw. nächsten AutoIncrement Wert herausfinden will und das geht nicht. Das heißt das Ergebniss "0" wie im meinem Fall ist schon richtig weil es vorher keine Verbindung gab die einen AutoIncrement eingetragen hat.

*ARGH*

Hat jemand eine Idee?
Gruß Christian

 
wahsaga
26-08-2004, 14:19 
 
Original geschrieben von christianpfeil
bullshit...vielleicht hätte ich vorher mal in der doku blättern sollen:
vielleicht hättest du auch alles lesen sollen, was da steht:

Anmerkung: Der Wert der MySQL SQL Funktion LAST_INSERT_ID() liefert immer den zuletzt erzeugten AUTO_INCREMENT Wert. Dieser wird zwischen Abfragen nicht zurückgesetzt.

 
Abraxax
26-08-2004, 14:20 
 
nein. du willst den erstellten wert erst dann rausfinden, wenn es in der DB eingetragen wurde ... alles andere ist nämlich bullshit. ;)

 
christianpfeil
26-08-2004, 14:25 
 
Hi !

Warum funktioniert dann die folgende Abfrage nicht:

$x=mysql_query("SELECT LAST_INSERT_ID() from artikel");
$y=mysql_fetch_array($x);
print_r ($y);


bzw.:


$x=mysql_query("SELECT LAST_INSERT_ID() from artikel");
$y=mysql_fetch_array($x);
echo $y[0];


Wie müsste ich das gestalten?

Danke,
Gruß Christian

 
mrhappiness
26-08-2004, 14:27 
 
Definiere funktioniert nicht

 
Abraxax
26-08-2004, 14:28 
 
Original geschrieben von christianpfeil
Wie müsste ich das gestalten?du müsstest vorher auch einen datensatz mittels INSERT während der aktuellen verbindung anlegen, wenn du den wert auslesen willst.

 
christianpfeil
26-08-2004, 14:32 
 
du müsstest vorher auch einen datensatz mittels INSERT während der aktuellen verbindung anlegen, wenn du den wert auslesen willst.

das ist ja genau der punkt: es gibt kein insert oder update vorher. ich möchte einfach nur den letzten auto_increment wert haben. Ich mache auch an dieser stelle keinen insert (oder davor).

Definiere funktioniert nicht

die ausgabe ist nach wie vor "0".

Gruß Christian

 
mrhappiness
26-08-2004, 14:37 
 
dann erkläre mir bitte nochmal was gegen SHOW TABLE STATUS spricht?

 
christianpfeil
26-08-2004, 14:39 
 
Original geschrieben von mrhappiness
dann erkläre mir bitte nochmal was gegen SHOW TABLE STATUS spricht?

Das spricht dagegen:

Warning: Supplied argument is not a valid MySQL result resource in /mnt/am2/08/220/00000005/htdocs/webedit/admin/neuer_artikel.php on line 24

;-)

Ich muss eine andere Lösung dafür finden.

Gruß Christian

 
Abraxax
26-08-2004, 14:40 
 
Original geschrieben von christianpfeil
Das spricht dagegen:und aufgrund welcher umsetzung deinerseits spricht dies dagegen?

was hast du an code dafür verwendet?

 
christianpfeil
26-08-2004, 14:45 
 
Diesen Code habe ich verwendet:


$id=mysql_query("SHOW TABLE STATUS LIKE 'artikel'");
$zeile0=mysql_fetch_array($id);
echo $zeile0[0];


An stelle "0" oder "auto_increment" soll der AutoIncrement Wert stehn.

So sieht die Tabelle dazu aus:

CREATE TABLE artikel (
id int(11) DEFAULT '0' NOT NULL auto_increment,
ueberschrift text NOT NULL,
sub_uberschrift text NOT NULL,
datum text NOT NULL,
autor_id int(11) DEFAULT '0' NOT NULL,
teaser text NOT NULL,
text text NOT NULL,
kategorie_id int(11),
keywords text NOT NULL,
PRIMARY KEY (id)
);

Auf einem anderen Server lief alles einwandfrei. Liegt wahrscheinlich an der DB Version also muss ich ne andere Lösung dafür finden.

Gruß Christian

 
mrhappiness
26-08-2004, 14:46 
 
$id=mysql_query("SHOW TABLE STATUS LIKE 'artikel'") or die(mysql_error());das gibt was aus?

 
christianpfeil
26-08-2004, 14:47 
 
Original geschrieben von mrhappiness
$id=mysql_query("SHOW TABLE STATUS LIKE 'artikel'") or die(mysql_error());das gibt was aus?

Array ( [0] => 0 [id] => 0 ) You have an error in your SQL syntax near 'TABLE STATUS LIKE 'artikel'' at line 1

Danke

 
goth
26-08-2004, 14:48 
 
Schon mal überlegt das der Auto_increment-Wert vielleicht gar nicht im RowIndex 0 steckt ... ?!

 
mrhappiness
26-08-2004, 14:49 
 
dann hast du also eine version < 3.23?
SHOW TABLE STATUS gibt's nämlich erst ab 3.23

armer kerl

schau mal in phpmyadmin, wenn der dir den nächsten auto_increment wert nicht anzeigt, dann wird's wohl nicht gehen

 
christianpfeil
26-08-2004, 14:50 
 
Bei php.net unter http://www.php.net/manual/de/function.mysql-insert-id.php steht:

To get the NEXT insert id use the mysql query SHOW TABLE STATUS LIKE 'tablename' and get the field auto_increment...

Funktionierte auch bei meinem anderen Server wie schon gesagt. Also dann nicht INDEX 0 sondern auto_increment - geht trotzdem nicht.

 
mrhappiness
26-08-2004, 14:52 
 
SELECT VERSION()und mit meinem post oben abgleichen

 
goth
26-08-2004, 14:52 
 
Und das ganze auch noch Case sensitive ... wenn möglich ... !

 
christianpfeil
26-08-2004, 14:52 
 
k.A. welche Version, müsste erstmal nachschauen:

In phpMyAdmin steht

Name: PRIMARY
Typ : PRIMARY
Kardinalität: 10

Demnach müsste es doch gehn!
Welche Lösung schlägst du vor wenn es die Version nicht zulässt?

Gruß Christian

 
mrhappiness
26-08-2004, 14:55 
 
Original geschrieben von christianpfeil
k.A. welche Version, müsste erstmal nachschauen:tu das

In phpMyAdmin steht

Name: PRIMARY
Typ : PRIMARY
Kardinalität: 10

Demnach müsste es doch gehn!muss nicht

 
christianpfeil
26-08-2004, 14:56 
 
Und was hat es mit "SELECT VERSION()" auf sich?

Weißt du vielleicht eine andere Lösung wenn das nicht funktioniert. Bei den früheren Versionen muss es doch auch funktioniert haben!?

 
mrhappiness
26-08-2004, 14:58 
 
Original geschrieben von christianpfeil
Und was hat es mit "SELECT VERSION()" auf sich?Versionsnummer von mysql erfragen

Weißt du vielleicht eine andere Lösung wenn das nicht funktioniertso aus dem stehgreif nicht

 
Quickborner
26-08-2004, 16:51 
 
so, bin mal gerade kurz aus dem Keller gekommen :p

christianpfeil !

ist es in deinem CMS möglich, daß mehrere Redakteure gleichzeitig Artikel einpflegen?

Ja ? hmm, ach so, dann ist vielleicht so eine Glaskugel-Funktion 'welches wird der nächste a_i-Wert sein' doch nicht das richtige ?

Wenn 2 Artikel-Uploads zeitnah passieren, erhalten beide Threads als Info zB '15'.

Der 1. trägt den Artikel ein, während dann die zugehörigen Daten/Bilder unter Referenz auf 15 gespeichert werden, trägt der 2. Thread einen weiteren Artikel ein: Dieser bekommt wegen Toller a_i Technik 16, während dieser 2.Thread aber Bilder/Daten mit Zeiger auf 15 speichert. boom.
Es sei denn, du verwendest bullet-proof Semaphoren/Locking Mechanismen. Aber das tust du nicht.

Glaub mir, bei Web-Projekten ist die Wahrscheinlichkeit _deutlich_ höher als Du vermutlich denkst.

Ich verstehe nicht, wieso man Minuten/Stunden/Manpower in etwas fragwürdiges investiert,um etwas zu erzwingen,
anstatt in dieser Zeit etwas vernünftiges, wiederverwendbares zu schreiben... naja, ich geh' mal wieder in den Keller.

im Betreff ist die Antwort auf die Versions-Frage, die bei allen mySql-Versionen funktionieren sollte(case sensitive).

Quickborner

Original geschrieben von goth
... und deshalb verwende ich (meistens) Autowerte und Ihre Derivate weil ich weder Zeit noch Lust habe mir was eigenes zu entwickeln, was sicherlich auch nicht ansatzweise so genial wäre wie Du ... !

-Danke-

 
wahsaga
26-08-2004, 16:55 
 
Original geschrieben von Quickborner
Wenn 2 Artikel-Uploads zeitnah passieren, erhalten beide Threads als Info zB '15'.

Der 1. trägt den Artikel ein, während dann die zugehörigen Daten/Bilder unter Referenz auf 15 gespeichert werden, trägt der 2. Thread einen weiteren Artikel ein: Dieser bekommt wegen Toller a_i Technik 16, während dieser 2.Thread aber Bilder/Daten mit Zeiger auf 15 speichert. boom.
ist doch unfug.

zunächst mal speichert man den neuen artikel, anschliessend kann man ermitteln, welche auto-ID dieser bekommen hat.
und die nutzt man jetzt auch weiter, um dann die bilder etc. abzulegen.

ich kann an deiner argumentation nichts entdecken, was gegen die verwendung von auto-inc sprechen würde.

 
Quickborner
26-08-2004, 17:10 
 
Quark, das ist kein Unfung

konzentriere Dich mal auf den Topic-Titel 'NÄCHSTEN AUTOINCREMENT WERT HERAUSFINDEN'.

Das kann ein PHP-Skript 100mal in 1 Sec. tun, dann haben zB 40 Threads davon als Info denselben Wert.

Was Du beschreibst ist der richtige Weg, den beschreitet christian aber nicht.

nice day
Quickborner

 
TobiaZ
26-08-2004, 17:14 
 
na, dass das id rausfinden (s. betreff) schwachsinn ist, haben wir ja nicht zum ersten mal hier geklärt. wenn er das nicht einsieht (hab jetzt nichmeh alles verfolgt) ist das sein problem.

 
goth
26-08-2004, 18:00 
 
Natürlich ist es schwachsinn herausfinden zu wollen welches wohl der nächste Auto_Increment-Wert sein wird ... bestenfalls absurde neugiere kann dazu führen ... fast so absurd wie der Versuch eine Lösung für die Unschärferelation zu finden ... im Zweifen (bei Last des Systems) ist der ermittelte Wert falsch ... !

 
karsten24
05-09-2004, 08:01 
 
Hi,

sorry wenn ich hier so reinplatze, aber ich hab da auch so ein
ähnliches problem

ich mache einen INSERT INTO 'tblname1,tblname2' ("tblname1.feldname1","tblname2.feldname2")

jetzt will ich den autoincwert der in tblname1 beim erzeugen erstellt wurde in tblname2 in ein feld eintragen, damit ich eine referenz habe.
sprich, der erzeugte datensatz in tblname1 soll durch den wert des autowertes mit der tblname2 verbunden werden

wie geht das am sichersten und am schnellsten?

mit mysql_insert_id() ? und dann noch nen update auf tblname2? aber
in welchem datensatz dann, könnt ja sein da sind schon wieder 10 erstellt worden zwischen drin. ich komm da einfach nicht weiter, wenn ihr mich jetzt auch zerreist aber in MS access sagt man einfach -> autowert der beziehung updaten.

gibts sowas net für php/mysql irgentwie oder ne klassensammlung oder irgentwas, darf ja nicht wahr sein.


also bitte , wie löst ihr sowas?

 
TobiaZ
05-09-2004, 13:27 
 
mit mysql_insert_id() ? und dann noch nen update auf tblname2? aber
in welchem datensatz dann, könnt ja sein da sind schon wieder 10 erstellt worden zwischen drin. ich komm da einfach nicht weiter, wenn ihr mich jetzt auch zerreist aber in MS access sagt man einfach -> autowert der beziehung updaten.ein update hinterher, setzt allerdings voraus, dass der table2-datensatz eine id hat, oder auf zei inserts aufteilen :dontknow:

 
goth
05-09-2004, 15:03 
 
Original geschrieben von karsten24
ich mache einen INSERT INTO 'tblname1,tblname2' ("tblname1.feldname1","tblname2.feldname2")

Und das funktioniert ... ?!

 
davidovich
05-09-2004, 15:29 
 
Ich glaub nich daas das funktioniert, was bei mir aber mal funktioniert hat ist das:

"UPDATE datenbank (feld) VALUES ('wert') WHERE id='$id'"
:D

 
goth
05-09-2004, 15:34 
 
Vielleicht ein Replace wenn Du die Where-Clause weglässt ... und datenbank tabelle heissen soll ... ... ein UPDATE sicherlich nicht ... die Syntax ist zumindest auf allen mir bekannten Datenbanken ungültig ... !

 
karsten24
05-09-2004, 21:10 
 
Frau müller zur korrektur bitte


Klar geht ein INSERT auf 2 tbl nicht gleichzeitig

aber selbst wenns auf 2 ist inserts verteilt ist, wie
sicher ist mysql_insert_id() in bezug auf konkurrierende user
in der offiziellen mysql doc steht mir da viel zu viel fadenscheiniges, und dann noch was von wegen LAST_INSERT_ID()....

was jetzt?

-archiv-

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:04 Uhr.