2009-12-01 3 views
7

Используя PHP, у меня есть простая база данных, которая может хранить несколько элементов с одним и тем же контентом. Я хочу удалить первое вхождение экземпляра, когда я использую DELETE.Как включить LIMIT для DELETE в SQLite?

Как включить LIMIT для DELETE в SQLite с помощью PHP?

ответ

9

Вы не можете активировать эти параметры из PHP, , вам нужно скомпилировать SQLite самостоятельно, чтобы включить эти параметры. Важно отметить, что вам необходимо скачать полную версию , а не выпуск источника с SQLite download page.

Если вы находитесь в Unix, загрузите tarball sqlite-3.6.20.tar.gz и загрузите его. Тогда:

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

Тогда вы будете иметь sqlite3 утилиты командной строки и библиотечные файлы в подкаталоге .libs.

+0

Я знаю, что вы этого не сделали, но почему мой вопрос был заблокирован? – user5243421

+0

Я нашел, что это не сработало, версия, которую я использую, - 3.7.6.2. Любые другие идеи? –

2

here С, кажется, что вы должны скомпилировать исходный код SQLite с помощью

#define SQLITE_ENABLE_UPDATE_DELETE_LIMIT 

для того, чтобы включить его.

+0

Упс, я должен отметить, что я делаю это с помощью PHP. – user5243421

16

Вы можете использовать предел с выбора, и вы можете комбинировать выбрать и удалить как:

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

Умный трюк. Еще одна вещь: безопаснее использовать столбец PK для 'someColumn'. – guneysus

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

Или: УДАЛИТЬ ОТ таблицы WHERE rowid IN (SELECT rowid FROM table WHERE condition LIMIT amount_of_rows) – LionKing

+0

Работал для меня. спасибо – IndieBoy

Смежные вопросы