Hallo zusammen,
ich benötige eine effiziente und "sicher" Abfrage einer MySQL-Datenbank-Tabelle aus einem PHP-Script.
Folgende Anforderungen meinerseites werden gestellt:
1) ich möchte einen Datensatz aus einer Tabelle mit fortlaufenden Zahlen auswählen und sicherstellen, dass dieser nicht noch einmal ausgewählt wird
2) der nächste Nutzer kommt nach einer sehr kurzen Zeit um ebenfalls wieder einen eindeutigen unbenutzten Datensatz auszuwählen
3) die Tabelle hat mehr als 500.000 Einträge
Folgende Ideen hatte ich bereits
a) 1. SELECT id, zahl, ... FROM tabelle WHERE status='0' LIMIT 1;
2. UPDATE tabelle SET status='1' WHERE id='$id';
b) 1. UPDATE tabelle t1, (SELECT id AS wert FROM tabelle t2 WHERE status='0') SET t1.status = '1', ident='irgendeinwert' WHERE t1.id = t2.wert;
2. SELECT * FROM tabelle WHERE ident='irgendeinwert'
beides habe ich bereits ausprobiert mit folgendem Ergebnis:
1) Variante a) ist schnell, aber garantiert mir leider nicht, dass jeder Datensatz nur einmal ausgewählt wird
2) Variante b) führt zu einer Überlastung meines Servers bei mehreren Nutzern aber garantiert mir, dass ich jeden Datensatz nur einmal nutze and update
Darum kommt jetzt die eigentliche Frage:
Gibt es eine bessere Möglichkeit, mit der ich mein Anliegen schnell und sicher verwirklichen kann???
ich benötige eine effiziente und "sicher" Abfrage einer MySQL-Datenbank-Tabelle aus einem PHP-Script.
Folgende Anforderungen meinerseites werden gestellt:
1) ich möchte einen Datensatz aus einer Tabelle mit fortlaufenden Zahlen auswählen und sicherstellen, dass dieser nicht noch einmal ausgewählt wird
2) der nächste Nutzer kommt nach einer sehr kurzen Zeit um ebenfalls wieder einen eindeutigen unbenutzten Datensatz auszuwählen
3) die Tabelle hat mehr als 500.000 Einträge
Folgende Ideen hatte ich bereits
a) 1. SELECT id, zahl, ... FROM tabelle WHERE status='0' LIMIT 1;
2. UPDATE tabelle SET status='1' WHERE id='$id';
b) 1. UPDATE tabelle t1, (SELECT id AS wert FROM tabelle t2 WHERE status='0') SET t1.status = '1', ident='irgendeinwert' WHERE t1.id = t2.wert;
2. SELECT * FROM tabelle WHERE ident='irgendeinwert'
beides habe ich bereits ausprobiert mit folgendem Ergebnis:
1) Variante a) ist schnell, aber garantiert mir leider nicht, dass jeder Datensatz nur einmal ausgewählt wird
2) Variante b) führt zu einer Überlastung meines Servers bei mehreren Nutzern aber garantiert mir, dass ich jeden Datensatz nur einmal nutze and update
Darum kommt jetzt die eigentliche Frage:
Gibt es eine bessere Möglichkeit, mit der ich mein Anliegen schnell und sicher verwirklichen kann???
Zuletzt bearbeitet: