2009-12-01 7 views
7

En utilisant PHP, j'ai une base de données simple qui peut stocker plusieurs éléments avec le même contenu. Je veux supprimer la première occurrence d'une instance lorsque j'utilise DELETE.Comment activer LIMIT pour DELETE dans SQLite?

Comment activer LIMIT pour DELETE dans SQLite en utilisant PHP?

Répondre

9

Vous ne pouvez pas activer ces options depuis PHP, vous devez compiler SQLite vous-même pour activer ces options. Surtout, vous devez télécharger la version complète , pas la version de la fusion de SQLite download page.

Si vous utilisez Unix, procurez-vous l'archive tar sqlite-3.6.20.tar.gz et téléchargez-la. Puis:

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

Ensuite, vous aurez l'utilitaire de ligne de commande sqlite3 et les fichiers de bibliothèque dans le sous-répertoire .libs.

+0

Je sais que vous n'avez pas fait cela, mais pourquoi ma question était-elle bloquée? – user5243421

+0

J'ai trouvé que cela ne fonctionnait pas, la version que j'utilise est 3.7.6.2. D'autres idées? –

2

De here, il semble que vous devez compiler le code source SQLite en utilisant

#define SQLITE_ENABLE_UPDATE_DELETE_LIMIT 

afin de l'activer.

+0

Whoops, je aurais dû remarquer que je fais cela avec php. – user5243421

16

Vous pouvez utiliser la limite avec sélection et vous pouvez combiner sélectionner et supprimer comme:

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

Astuce astucieuse. Une dernière chose: il est plus sûr d'utiliser la colonne PK pour 'someColumn'. – guneysus

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

Ou: SUPPRIMER à partir de la table WHERE rowid IN (SELECT rowid FROM table WHERE condition LIMIT amount_of_rows) – LionKing

+0

A travaillé pour moi. Je vous remercie – IndieBoy