2009-12-01 10 views
7

Korzystając z PHP, mam prostą bazę danych, która może przechowywać wiele elementów o tej samej zawartości. Chcę usunąć pierwsze wystąpienie wystąpienie, gdy używam DELETE.Jak włączyć LIMIT dla USUŃ w SQLite?

Jak włączyć LIMIT dla DELETE w SQLite używając PHP?

Odpowiedz

9

Nie możesz włączyć tych opcji z poziomu PHP, musisz skompilować SQLite siebie, aby włączyć te opcje. Co ważne, należy pobrać pełną wersję , a nie amalgamację z wersji SQLite download page.

Jeśli używasz systemu Unix, pobierz archiwum sqlite-3.6.20.tar.gz i pobierz je. Następnie:

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

Wtedy będziesz mieć narzędzia sqlite3 wiersza poleceń i plików bibliotecznych w podkatalogu .libs.

+0

Wiem, że tego nie zrobiłeś, ale dlaczego moje pytanie zostało zablokowane? – user5243421

+0

Znalazłem, że nie działa, wersja, której używam to 3.7.6.2. Jakieś inne pomysły? –

2

Od here, wydaje się, że trzeba skompilować kod źródłowy SQLite używając

#define SQLITE_ENABLE_UPDATE_DELETE_LIMIT 

w celu umożliwienia mu.

+0

Ups, powinienem zauważyć, że robię to z php. – user5243421

16

Można użyć limitu z select można połączyć wybierz i usuń jak:

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

Sprytna sztuczka. Jeszcze jedno: bezpieczniej jest użyć kolumny PK dla 'someColumn'. – guneysus

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

Lub: DELETE FROM table WHERE rowid IN (WYBIERZ rowid z tabeli WHERE warunek LIMIT amount_of_rows) – LionKing

+0

Pracowałem dla mnie. Dziękuję Ci – IndieBoy