2010-03-25 8 views
2

J'essaye de retourner un nombre basé sur le nombre de résultats d'une table et pour éviter d'avoir à compter les résultats deux fois dans l'instruction IF J'utilise une sous-requête. Cependant, j'obtiens une erreur de syntaxe lorsque j'essaie d'exécuter la requête, la sous-requête que j'ai testée fonctionne très bien.La requête MySQL de la sous-requête ne fonctionne pas

Des idées quel est le problème avec la requête? La syntaxe semble correcte me

SELECT IF(daily_count>8000,0,IF(daily_count>6000,1,2)) 
FROM (
    SELECT count(*) as daily_count 
    FROM orders201003 
    WHERE DATE_FORMAT(date_sub(curdate(), INTERVAL 1 DAY),"%d-%m-%y") = 
    DATE_FORMAT(reqDate,"%d-%m-%y") 
) q 

message d'erreur que je reçois est:

Vous avez une erreur dans votre syntaxe SQL. Consultez le manuel qui correspond à votre version du serveur MySQL pour la syntaxe droit d'utiliser le nombre près de « SELECT (*) comme daily_count DE orders201003

+0

Pourriez-vous s'il vous plaît poster l'erreur de syntaxe que vous obtenez? – Quassnoi

+0

@Quassnoi, mis à jour avec le message d'erreur - je ne sais pas à quel point c'est utile. –

Répondre

3
SELECT CASE WHEN daily_count > 8000 THEN 0 WHEN daily_count > 6000 THEN 1 ELSE 2 END 
FROM (
     SELECT count(*) as daily_count 
     FROM orders201003 
     WHERE DATE_FORMAT(date_sub(curdate(), INTERVAL 1 DAY),"%d-%m-%y") = 
       DATE_FORMAT(reqDate,"%d-%m-%y") 
     ) AS q 

Notez également que les requêtes imbriquées sont uniquement pris en charge à partir de MySQL 4.1.

+0

@Quassnoi Faut-il faire une différence en utilisant 'CASE' au lieu de' IF'? –

+0

@James: Non, c'est juste plus lisible. Quelle version de 'MySQL' utilisez-vous? Essayez d'ajouter 'AS' avant l'alias de la requête, cela peut être nécessaire pour les anciennes versions. – Quassnoi

+0

La version est 4.0.21, juste découvert qu'il ne supporte pas les sous-requêtes :( –

Questions connexes