J'ai mis en place une table de test pour une erreur que j'ai récemment rencontrée. Cela implique l'utilisation de LIMIT lorsque vous essayez de supprimer un seul enregistrement d'une table MySQL.
L'erreur dont je parle est "Vous avez une erreur dans votre syntaxe SQL; consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe correcte à utiliser près de 'LIMIT 1' à la ligne 1"
La table que je compose est appelée test ; il a 3 colonnes, id , nom et créé . J'ai rempli la table avec plusieurs enregistrements, puis j'ai essayé d'en supprimer un. Vous trouverez ci-dessous la déclaration que j'avais l'habitude d'essayer d'accomplir.
DELETE t FROM test t WHERE t.name = 'foo' LIMIT 1
Sans l'utilisation de LIMIT 1, l'instruction est parfaitement exécutée, mais bien entendu, je n'utiliserais pas LIMIT s'il n'était pas nécessaire.
Je suis tout à fait conscient que je peux utiliser une autre déclaration pour accomplir cette suppression avec succès. Voir ci-dessous: DELETE FROM test WHERE name = 'foo' LIMIT 1
Cependant, ma question est centrée sur les raisons pour lesquelles la première déclaration ne fonctionne pas avec LIMIT.
Ma question est donc la suivante: qu'est-ce que j'ai mal fait en ce qui concerne la première déclaration générant cette erreur?
la requête de suppression autorise uniquement les modificateurs après la "commande" DELETE à indiquer à la base de données ce que/comment gérer les choses.
voir cette page
simplement utiliser
DELETE FROM test WHERE 1= 1 LIMIT 10
DELETE t.* FROM test t WHERE t.name = 'foo' LIMIT 1
@Andre Si j'ai bien compris ce que vous demandez, je pense qu'il ne manque que le t. * Avant FROM
.
Utilisation row_count - your_desired_offset
Donc, si nous avions 10 lignes et voulons compenser 3
10 - 3 = 7
Maintenant la requête delete from table where this = that order asc limit 7
conserve les 3 derniers et order desc
garder les 3 premiers:
$row_count - $offset = $limit
Delete from table where entry = criteria order by ts asc limit $limit
De la documentation :
You cannot use ORDER BY or LIMIT in a multiple-table DELETE.