2013-05-28 5 views
0

Je suis en train de choisir parmi une table de base de données comme le ... que vous avez choisimysql Sélectionnez où somme des colonnes est inférieure à

id | task   | last_run | interval 
1 | test-run | 1369715091 | 30 
2 | anothertask | 1369715091 | 60 

last_run est unix-temps, mis à jour par le script, quand il fonctionne . L'intervalle est l'intervalle entre les exécutions lorsque cette tâche doit être exécutée.

Ce que je dois faire est d'exécuter une requête où je sélectionne seulement les tâches où last_run + interval est inférieure à l'heure actuelle.

C'est ce que je suis venu avec ...

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`next_run` > '1369717906') 

... mais je reçois l'erreur ...

Unknown column 'next_run' in 'where clause' 

Avez-vous des idées?

+0

Cette requête a travaillé. Merci les gars - ne peut pas accepter une réponse pendant 7 minutes .. SELECT *, ('last_run' +' intervalle') comme next_run DE 'cron' WHERE (' last_run' + 'intervalle' <'1369719025') – ajdi

+0

TRy comme ceci, Sélectionnez * des tâches où ((last_run + intervalle) MahaSwetha

Répondre

1

Vous pouvez fournir ces deux noms là au lieu d'Alias ​​

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`last_run`+`interval`) > 1369717906 

Vous ne pouvez pas utiliser Alias ​​dans une clause WHERE selon MySQL Docs

Un alias peut être utilisé dans une liste de sélection de requête pour donner une colonne un nom différent. Vous pouvez utiliser l'alias dans les clauses GROUP BY, ORDER BY ou HAVING pour faire référence à la colonne. SQL standard n'autorise pas les références aux alias de colonnes dans une clause WHERE. Cette restriction est imposée parce que lorsque la clause WHERE est évaluée, la valeur de la colonne ne peut pas encore avoir été déterminé

1

Utilisation (last_run+interval) au lieu de next_run dans votre requête.

1

Dans la clause where, utilisez l'expression plutôt que l'alias:

WHERE last_run + interval > 1369717906 
1

Pour autant que je sais where clause cant alias utilisation

donc vous avez deux options

soit répéter la expression dans où clause

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` WHERE (`last_run`+`interval`) > '1369717906' 

Ou nous e having qui peut utiliser alias

SELECT *, (`last_run`+`interval`) as next_run FROM `tasks` HAVING (`next_run` > '1369717906') 

voir MySQL Tutorial et DEMO

Questions connexes