1

次のMySQL SELECTステートメントがあります(PHPとともに):

SELECT *
FROM EVENTS
WHERE (
 time1
 BETWEEN "2013-04-22 19:30:00"
 AND "2013-04-22 19:50:00"
)
OR (
 time2
   BETWEEN "2013-04-22 19:30:00"
   AND "2013-04-22 19:50:00"
)

上記のクエリは、次の行を返します。

    id   |        time1        |       time2        |
   -------------------------------------------------
    26     2013-04-22 19:45:00  2013-04-26 12:25:00

したがって、明らかにtime1、行が返されたものです。

私の質問は次のとおりです。上記の SELECT ステートメントを使用して行を反復処理している場合、返される行を「トリガー」したのが time1 か time2 かをどのように判断できますか?

どんな助けでも素晴らしいでしょう!

4

3 に答える 3

6
SELECT  *,
        IF(time1 BETWEEN "2013-04-22 19:30:00" AND "2013-04-22 19:50:00", 
          'Time1', 'Time2')  Result
FROM    EVENTS
WHERE   time1 BETWEEN "2013-04-22 19:30:00" AND "2013-04-22 19:50:00" OR
        time2 BETWEEN "2013-04-22 19:30:00" AND "2013-04-22 19:50:00"

呼び出される追加の列Resultは、条件が true を返した列をテストするだけです。たとえば、両方が true を返す場合、列のみtime1になりresultます。

更新 1

SELECT  *,
        CASE
            WHEN time1 BETWEEN '2013-04-22 19:30:00' AND '2013-04-22 19:50:00' AND 
                 time2 BETWEEN '2013-04-22 19:30:00' AND '2013-04-22 19:50:00'
            THEN 'Time1 and Time2'
            WHEN time1 BETWEEN '2013-04-22 19:30:00' AND '2013-04-22 19:50:00' 
            THEN 'Time1'
            ELSE 'Time2'
        END Result
FROM    EVENTS
WHERE   time1 BETWEEN '2013-04-22 19:30:00' AND '2013-04-22 19:50:00' OR
        time2 BETWEEN '2013-04-22 19:30:00' AND '2013-04-22 19:50:00'
于 2013-04-23T03:34:54.267 に答える
0

私はテストしていませんが、次のようなものです:

SELECT *,  IF(time1
 BETWEEN "2013-04-22 19:30:00"
 AND "2013-04-22 19:50:00",1,0) as fromtime1
FROM EVENTS
WHERE (
 time1
 BETWEEN "2013-04-22 19:30:00"
 AND "2013-04-22 19:50:00"
)
OR (
 time2
   BETWEEN "2013-04-22 19:30:00"
   AND "2013-04-22 19:50:00"
)

http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if

于 2013-04-23T03:37:28.340 に答える