Maison >base de données >tutoriel mysql >Comment contourner la restriction LIMIT de sous-requête de MySQL avec l'opérateur IN ?

Comment contourner la restriction LIMIT de sous-requête de MySQL avec l'opérateur IN ?

DDD
DDDoriginal
2024-12-14 03:13:14203parcourir

How to Work Around MySQL's Subquery LIMIT Restriction with IN Operator?

Incompatibilité MySQL avec les limites des sous-requêtes

Le message d'erreur "Cette version de MySQL ne prend pas encore en charge 'LIMIT & IN/ALL/ANY /SOME subquery'" indique que la version MySQL utilisée ne prend pas en charge l'utilisation d'une clause LIMIT dans une sous-requête lors de l'utilisation de certains opérateurs comme IN.

Solution

Une solution de contournement à cette limitation consiste à utiliser une sous-requête JOIN au lieu d'une sous-requête IN. Le code suivant illustre cette approche :

$Last_Video = $db->fetch_all('
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 ce code :

  • Un alias de table "v" est utilisé pour la table "vidéo" externe.
  • Une sous-requête est utilisée pour sélectionner les VID des vidéos correspondant au filtre de titre et les classer par durée de visionnage par ordre décroissant. Cette sous-requête est alias "v2".
  • Une clause JOIN est utilisée pour joindre la table principale "video" avec la sous-requête "v2" sur la colonne VID.
  • Le résultat final est limité à un enregistrement sélectionné au hasard en utilisant RAND() et LIMIT.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn