Erreur : "Cette version de MySQL ne prend pas encore en charge la sous-requête 'LIMIT & IN/ALL/ANY/SOME'"
Quand En exécutant une requête PHP qui utilise une sous-requête avec une clause LIMIT et un opérateur IN, vous pouvez rencontrer une erreur telle que ceci :
Error during SQL execution: SELECT VID, thumb FROM video WHERE VID IN ( SELECT VID FROM video WHERE title LIKE "%funny%" ORDER BY viewtime DESC LIMIT 5) ORDER BY RAND() LIMIT 1 MySQL Error: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' MySQL Errno: 1235
Cette erreur se produit car certaines versions de MySQL ne prennent pas en charge les sous-requêtes avec une clause LIMIT utilisée conjointement avec les opérateurs IN, ALL, ANY ou SOME.
Solution
Pour résoudre ce problème, pensez à utiliser un JOIN au lieu d'un sous-requête :
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
Cette requête modifiée utilise un INNER JOIN pour combiner les résultats de deux instructions SELECT. La première instruction SELECT récupère le VID des vidéos dont les titres contiennent le nom de chaîne spécifié, en les classant par durée de visionnage par ordre décroissant et en limitant les résultats aux 5 premiers. La deuxième instruction SELECT utilise ensuite cette liste VID pour filtrer l'ensemble de résultats principal, récupérer des colonnes spécifiques de la table vidéo.
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!