FAQ |
Kalender |
|
2009-06-26, 08:39 | #1 | ||
|
|||
Mycket flitig postare
|
Hej,
Sitter här på morgonkvisten och funderar lite över hur jag ska formulera en SQL-fråga. Vad jag har är en ständigt växande tabell. Jag har en kolumn som är en ENUM( 'true', 'false' ), låt oss kalla den `active`. Default-värdet är 'true'. Vad jag är ute efter är att endast ha de senaste X raderna satta till true och resten till false. Prövade med följande: UPDATE `table` SET `active` = 'false' ORDER BY `id` DESC LIMIT X,1000 I mina ögon så sorterar den tabellen bakvänt och tar 1000 rader efter rad X och sätter dom till false. Men det fungerade inte. Prövade även denna sub query variant som inte heller fungerade... UPDATE `table` SET `active` = 'false' WHERE `active` = 'true' ORDER BY `id` DESC LIMIT ( SELECT COUNT(*) FROM `table` WHERE `active` = 'true') - X Notera att jag bytt ut X mot ett värde. Jag skulle ju kunna göra två frågor av det hela, en som räknar ut alla rader och därefter gör en update på det föregående resultatet minus 20. Men det känns inte optimalt. Scriptet kommer att köras var 5:e minut via crontab och se till att tabellen aldrig blir överfull. Har nämligen en indexerng på `active`och gör väldigt många urval på just rader med `active` = 'true'. Några tips? |
||
Svara med citat |
Svara |
|
|