127 votes

MySQL - Cette version de MySQL ne prend pas encore en charge les sous-requêtes "LIMIT & IN/ALL/ANY/SOME".

Voici le code que j'utilise

    $Last_Video         = $db->fetch_all('
    SELECT VID, thumb
    FROM video
    WHERE VID IN (
        SELECT VID
        FROM video
        WHERE title LIKE "%'.$Channel['name'].'%"
        ORDER BY viewtime DESC
        LIMIT 5)
    ORDER BY RAND()
    LIMIT 1
');

Voici l'erreur que je reçois

 Message:   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<br />
 MySQL Error:   This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'<br />
MySQL Errno:    1235

Comment puis-je résoudre ce problème ? Il y a une autre façon de le faire... pour que je n'obtienne pas l'erreur...

192voto

Mike Brant Points 39322

Au lieu d'utiliser IN, vous pouvez utiliser JOIN

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

164voto

Surender Points 1729

Vous pouvez utiliser la méthode ci-dessous pour contourner cette erreur.

$Last_Video = $db->fetch_all('
    SELECT VID, thumb
    FROM video
    WHERE VID IN (select * from (
        SELECT VID
        FROM video
        WHERE title LIKE "%'.$Channel['name'].'%"
        ORDER BY viewtime DESC
        LIMIT 5) temp_tab)
    ORDER BY RAND()
    LIMIT 1
');

5voto

echo_Me Points 20305

Vous n'avez pas besoin d'une sous-requête ici. Essayez ceci :

 SELECT VID, thumb
 FROM video
 WHERE title LIKE "%'.$Channel['name'].'%"
 ORDER BY RAND() DESC
 LIMIT 1

Dans MySQL 5.0.26 et plus, vous obtiendrez une erreur :

MySQL ne supporte pas LIMIT dans les sous-requêtes pour certains opérateurs de sous-requêtes :

Référence .

1voto

Vasim Walikar Points 11

Ajoutez que c'est votre état actuel

(SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC)

0voto

Pourquoi ne pas utiliser simple : ?

SELECT v.VID, v.thumb
FROM video as v
WHERE title LIKE "%'.$Channel['name'].'%"
ORDER BY viewtime DESC
LIMIT 5

qu'en est-il des sous-requêtes ici ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X