2009-10-01 5 views
1

J'ai une table dans ma base de données MySQL qui ressemble à ce qui suitComment avoir plus d'une condition pour les données rappeler

banner 
-------- 
id : bigint(20) 
name : varchar(75) 
type : set('news','event') 
link : bigint(20) 
when : int(10) 

Ce que je veux faire est que je veux être en mesure de se rappeler toutes les lignes avec le type de « nouvelles »
mais je veux seulement rappeler toutes les lignes avec le type de « événement » où « quand> time() »
ou fondamentalement tout événement qui a lieu à l'avenir

RECAP :

  • rappel tous NOUVELLES
  • rappeler uniquement les événements qui se produisent à l'avenir

Je suis en cours d'exécution de la requête SQL en utilisant PHP comme langage de script.

Merci à tous

Répondre

0

j'avais essayé quelque chose de semblable à ce que Lukasz Lysik suggéré, mais était encore en train des événements passés.

Je pense que ce qui suit, il résolu

SELECT * 
FROM `banner` 
WHERE IF(`type` = 'event', `when` > NOW(), 1) 
ORDER BY `when` DESC 
+0

im espérant comprendre cette utilisation droite OERE SI (* CONDITION *, * UTILISER SI VRAI *, * UTILISER SI FAUX *) – DBunting

+0

Cela doit être de la notation la moins compréhensible imaginable. La version OR ci-dessus est beaucoup plus claire. –

+0

im plus préoccupé par la fonctionnalité appropriée, puis le code de nettoyage. Si ça ne fait pas ce dont j'ai besoin, je ne me soucie pas de la propreté – DBunting

1
SELECT * 
FROM banner 
WHERE type = "news" 
    OR (type = "event" AND when > NOW()) 
+0

J'ai essayé mais son outputing encore les anciens événements – DBunting

+0

-vous envoyer des données de la table? –

+0

Si la condition ''when> NOW()'' est valide, alors la requête devrait fonctionner. Cependant, votre colonne 'when' stocke un entier à 10 chiffres, mais NOW() renvoie une valeur DATETIME. Je suppose que le problème est que la comparaison ne fonctionne pas comme prévu - vous devriez changer 'quand' en un type date/heure (peut-être DATETIME, peut-être TIMESTAMP). –

Questions connexes