Как включить LIMIT для DELETE в SQLite?

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

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


person user5243421    schedule 01.12.2009    source источник


Ответы (4)


Вы не можете включить эти параметры из PHP, вам нужно самостоятельно скомпилировать SQLite, чтобы включить эти параметры. Важно отметить, что вам необходимо загрузить полную версию, а не объединенный выпуск исходного кода с страницы загрузки SQLite< /а>.

Если вы используете Unix, получите архив 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.

person intgr    schedule 01.12.2009
comment
Я знаю, что вы этого не делали, но почему мой вопрос был заблокирован? - person user5243421; 06.12.2009
comment
Я обнаружил, что это не работает, я использую версию 3.7.6.2. Любые другие идеи? - person ; 24.05.2011
comment
В наши дни вы можете передать параметр --enable-update-limit в ./configure вместо того, чтобы касаться cflags. (Конечно, все еще необходимо определить SQLITE_ENABLE_UPDATE_DELETE_LIMIT при использовании созданного объединения sqlite3.c в отдельном проекте) - person Shawn; 04.02.2021

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

DELETE FROM Foo
WHERE someColumn in
(
  SELECT someColumn FROM FOO WHERE SomeCondition LIMIT 200
)
person Andreas    schedule 20.07.2012
comment
Умный трюк. Еще одно: безопаснее использовать столбец PK для someColumn. - person guneysus; 21.07.2016
comment
Не совсем то же самое. Количество совпадающих строк может быть больше 200. - person tonypdmtr; 21.05.2020
comment
для меня это не сработало, пока я не заменил IN на =. - person Mehdi Rezzag Hebla; 27.09.2020

Из здесь видно, что вам нужно скомпилировать исходный код SQLite, используя

#define SQLITE_ENABLE_UPDATE_DELETE_LIMIT

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

person Nick Dandoulakis    schedule 01.12.2009
comment
Ой, я должен был отметить, что я делаю это с php. - person user5243421; 01.12.2009

person    schedule
comment
Или: DELETE FROM table WHERE rowid IN (SELECT rowid FROM table WHERE условие LIMIT amount_of_rows) - person LionKing; 14.12.2014
comment
@LionKing Без использования IN не работало, работало только с = - person Mehdi Rezzag Hebla; 27.09.2020
comment
@MehdiRezzagHebla, использующий форму IN, работает, как и ожидалось, непосредственно в sqlite3. Я знаю, что это старый комментарий, но хочу уточнить, что он работает. - person rlb; 15.06.2021