Maison >base de données >tutoriel mysql >Comment corriger l'erreur « LIMIT & IN/ALL/ANY/SOME Subquery » de MySQL ?
MySQL : Correction de l'erreur « LIMIT & IN/ALL/ANY/SOME Subquery »
Lors de l'utilisation de MySQL, vous pouvez rencontrer l'erreur " Cette version de MySQL ne prend pas encore en charge la sous-requête 'LIMIT & IN/ALL/ANY/SOME'". Cette erreur se produit généralement lorsque vous tentez d'utiliser une sous-requête avec une clause LIMIT et certains opérateurs d'ensemble, tels que IN.
Considérez le code PHP suivant :
$Last_Video = $db->fetch_all(' SELECT VID, thumb FROM video WHERE VID IN ( SELECT VID FROM video WHERE title LIKE "%'.$Channel['name'].'%quot; ORDER BY viewtime DESC LIMIT 5) ORDER BY RAND() LIMIT 1 ');
Ce code tente de récupérer un vidéo aléatoire à partir d’un ensemble de vidéos contenant une chaîne spécifique dans leur titre. Cependant, les versions MySQL qui ne prennent pas en charge la syntaxe « LIMIT & IN/ALL/ANY/SOME subquery » échoueront avec l'erreur susmentionnée.
Solution : remplacer IN par JOIN
Pour résoudre ce problème, vous pouvez remplacer l'opérateur IN par une instruction JOIN. Cela peut être réalisé en utilisant le code suivant :
SELECT v.VID, v.thumb FROM video AS v INNER JOIN (SELECT VID FROM video WHERE title LIKE "%'.$Channel['name'].'%" ORDER BY viewtime DESC LIMIT 5) as v2 ON v.VID = v2.VID ORDER BY RAND() LIMIT 1
Dans cette requête modifiée, nous utilisons un INNER JOIN pour lier les deux tables, en garantissant que seuls les ID vidéo correspondants sont sélectionnés. L'opération JOIN remplace l'opérateur IN, permettant à la requête de s'exécuter avec succès même sur les versions de MySQL qui ne prennent pas en charge la sous-requête "LIMIT & IN/ALL/ANY/SOME".
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!