web-dev-qa-db-fra.com

MySQL - Cette version de MySQL ne supporte pas encore la sous-requête 'LIMIT & IN / ALL / ANY / SOME

c'est le code que im utilisant

    $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
');

C'est l'erreur que me donne

 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? son autre moyen de le faire ... donc je ne reçois pas l'erreur ...

72
Mihai Viteazu

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
128
Mike Brant

Vous pouvez utiliser 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
');
115
Surender

Vous n'avez pas besoin d'une sous-requête ici. Essaye ça:

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

Dans MySQL 5.0.26 et versions ultérieures, vous obtiendrez une erreur:

MySQL ne prend pas en charge LIMIT dans les sous-requêtes de certains opérateurs de sous-requêtes:

référence .

6
echo_Me

Pourquoi vous ne pouvez pas utiliser simple:?

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

que pour les sous-requêtes ici?

0