2009-12-09 5 views
1

j'ai cette requêteMySQL Query: requête avec des instructions conditionnelles

SELECT 
IF(isnull(ub.user_lecture_id), 0, ub.user_lecture_id) as IsPurchased, 
cs.title,cs.start_date, cs.start_time, cs.end_time 
FROM campus_schedule cs 
LEFT JOIN campus_bookinfo cb ON cs.bookid=cb.idx_campus_bookinfo 
LEFT JOIN user_lectures ub ON ub.id_product = cs.idx_campus_schedule AND ub.id_customer = 11 
WHERE cs.idx_campus = 1 and cs.title like '%%' and cs.status=1 

Ce qui montre: Click to view Output

Explication: if (IsPurchased == 0), il est pas encore acheté mon client

Ma question: si vous regardez l'heure de la ligne avec IsPurchased = 1, la plage de temps est en conflit avec l'heure dans IsPurchases = 0. comment puis-je comparer et conclure que l'heure de la même date de la requête est en conflit avec l'heure et la date des autres lignes. les résultats peuvent être 1 ou 0 dans un nom de champ "conflit"

J'espère que vous avez compris. Merci pour l'aide!!!

Répondre

1

Pour comparer les temps, vous trouverez qu'il est plus facile d'utiliser les champs DATETIME.

Pour vérifier les lignes "en conflit", vous devrez probablement avoir une sous-requête dans la clause WHERE.

1

La sous-requête devrait fonctionner mais sera inefficace dans mysql. Vous devriez créer une table temporaire et l'analyser. Ou faites le même en ligne, comme:

set @lastdate=0; 
set @lasttime=0; 

select IsPurchased, title, start_date, start_time, end_time, if(@lastdate = start_date, @lasttime < end_time, 1) as CONFLICT, @lastdate:=start_date, @lasttime:=start_time 
from (your_query ORDER BY start_date, start_time, end_time) t ; 

c'est juste une idée, cela a fonctionné pour moi plusieurs fois.

Questions connexes