2017-01-05 9 views
1

私はSQLクエリをデバッグするより効率的な方法を探しています。私はほとんどのクエリチェックにphpMyAdminを使用しています。ここでは、クエリの例です:今$始めるとstartが満たさ(と紛らわしい)された条件のかを確認しようとしたとき、それは迷惑を取得両方のタイムスタンプされ、時々これらの条件が大量にあり得ることを考慮どのSQL条件が満たされているかを確認

SELECT * FROM `schedule` WHERE 
(
    `start` = {$start} OR 
    ((`start` + (`runtime` * 60)) > {$start} AND (`start` + (`runtime` * 60)) <= {$end}) OR 
    (`start` > {$start} AND `start` < {$end}) 
) AND `group_id` = {$group} 

(例では3つではありません)、どちらが満たされたかを迅速に判断する方法はありますか?手動で1つずつ削除する必要はありませんか?

ありがとうございました!

答えて

0

ない美しいソリューションがありますが、列のリストに各条件を追加することができます。

SELECT *, 
    IF (`start` = {$start}, 1, 0) AS con1, 
    IF (((`start` + (`runtime` * 60)) > {$start} AND (`start` + (`runtime` * 60)) <= {$end}), 1, 0) AS con2, 
FROM `schedule` WHERE 
(
`start` = {$start} OR 
((`start` + (`runtime` * 60)) > {$start} AND (`start` + (`runtime` * 60)) <= {$end}) OR 
(`start` > {$start} AND `start` < {$end}) 
) AND `group_id` = {$group} 
0

あなたが選択リストにブール式を入れて、そして彼らに意味のある列名を与えることができます。これらの式は、WHERE句の条件を満たす行に対してのみ評価されるため、余計な作業はありません。これらの式は、クエリ結果セットで1(真)または0(偽)を返します。

SELECT ..., 
    `start` = {$start} AS is_start, 
    ((`start`+(runtime*60)) > {$start} AND (`start`+(runtime*60)) <= {$end}) AS is_overlapping, 
    (`start` > {$start} AND `start` < {$end}) AS is_between_start_and_end 
FROM `schedule` 
WHERE 
(
    `start` = {$start} 
    OR ((`start`+(runtime*60)) > {$start} AND (`start`+(runtime*60)) <= {$end}) 
    OR (`start` > {$start} AND `start` < {$end}) 
) AND group_id = {$group} 
関連する問題