2009-12-01 8 views
7

Mit PHP habe ich eine einfache Datenbank, die mehrere Elemente mit dem gleichen Inhalt speichern kann. Ich möchte das erste Auftreten einer Instanz löschen, wenn ich DELETE verwende.Wie aktivieren Sie LIMIT für DELETE in SQLite?

Wie aktivieren Sie LIMIT für DELETE in SQLite mit PHP?

Antwort

9

Sie können diese Optionen nicht innerhalb von PHP aktivieren, Sie müssen SQLite selbst kompilieren, um diese Optionen zu aktivieren. Wichtig, müssen Sie die Vollversion herunterladen, nicht die Verschmelzung Quellenfreigabe von SQLite download page.

Wenn Sie unter Unix sind, holen Sie sich den sqlite-3.6.20.tar.gz Tarball und laden Sie ihn herunter. Dann:

tar xzf sqlite-3.6.20.tar.gz 
cd sqlite-3.6.20 
export CFLAGS='-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1' 
./configure 
make 

Dann haben Sie die sqlite3 Befehlszeilenprogramm und die Bibliotheksdateien im .libs Unterverzeichnis.

+0

Ich weiß, dass du das nicht getan hast, aber warum war meine Frage gesperrt? – user5243421

+0

Ich fand, es hat nicht funktioniert, die Version, die ich verwende, ist 3.7.6.2. Irgendwelche anderen Ideen? –

2

Von here, so scheint es, dass Sie den SQLite-Quellcode kompilieren

#define SQLITE_ENABLE_UPDATE_DELETE_LIMIT 

, um es zu ermöglichen, verwenden.

+0

Whoops, ich habe darauf hingewiesen, dass ich dies mit php mache. – user5243421

16

Sie können Limit mit ausgewählten und Sie können wählen Sie kombinieren und löschen wie:

DELETE FROM Foo 
WHERE someColumn in 
(
    SELECT someColumn FROM FOO WHERE SomeCondition LIMIT 200 
) 
+0

Cleverer Trick. Noch eine Sache: Es ist sicherer, die PK-Spalte für 'someColumn' zu verwenden. – guneysus

10
DELETE FROM table WHERE rowid = (SELECT rowid FROM table WHERE condition LIMIT 1) 
+0

Oder: DELETE FROM Tabelle WHERE ROWID IN (SELECT ROWID FROM Tabelle WHERE Bedingung LIMIT Menge_von_Rows) – LionKing

+0

Arbeitete für mich. Vielen Dank – IndieBoy

Verwandte Themen