Utiliser UPDATE + SELECT pour faire un cache FIFO
Bonjour, c'est la première fois que je poste sur ce joli site :D
Alors voilà, j'ai une bête question de syntaxe en SQL.
J'ai une table avec deux champs (string url, date date), qui contiennent... des url et des dates :?
Code:
1 2 3 4 5 6 7 8
| <ma_table>
url date
-------------------------------------------
http://host/url_1.wav 14/05/2008 15:20:39
http://host/url_2.wav 15/05/2008 20:30:43
http://host/url_3.wav 16/05/2008 10:55:12
... |
J'ai une fonction avec laquelle j'insére de nouvelles lignes (une à une) dans cette table, le champ date étant renseigné par la date d'insertion. J'ai donc écrit une requête 'INSERT INTO <ma_table> bla bla' qui semble marcher très bien, là n'est pas le problème.
Ce que je veux, c'est en faire une sorte de cache FIFO. C'est-à dire que si le nombre de lignes de la tables atteint un certain seuil, alors je remplace la ligne la plus ancienne au lieu d'insérer une nouvelle ligne. J'ai donc écrit la requête suivante, dont la syntaxe me semblait correcte :
Code:
1 2 3
| UPDATE <ma_table>
SET url = '<mon_url>', date = DateTime.Now
WHERE date = (SELECT MIN(date) FROM <ma_table>) |
Ca me retourne l'exception suivante (C#):
Citation:
ERROR [42000] [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe dans l'instruction UPDATE.
Je cherche à savoir pourquoi. J'ai fait quelques tests, et apparemment ça viendrait du fait que date est à la fois dans SET et dans WHERE. Je vois pour le moment deux solutions sales-mais-qui-devraient-marcher-en-attendant-mieux, en faisant 2 requêtes :
- updater l'url, puis updater la date
- supprimer la ligne, puis en insérer une autre
Mais j'aimerais avoir une solution plus propre. Je débute en SQL, donc vos conseils sont la bienvenue...
Merci d'avance.