1

ここにいる人が探していたようなものを探しています。MySQL を使いたいだけです。以下の表は、私のデータベースにあるものです (簡略化されています)。

+------+------+------+------+
| id   | name | first| last |
+------+------+------+------+
|    1 | John | 1020 | 0814 |
|    2 | Ram  | 0827 | 0420 |
|    3 | Jack | 0506 | 0120 |
|    4 | Jill | 0405 | 0220 |
|    5 | Zara | 1201 | 1219 |
+------+------+------+------+

まず、エントリは id 4 ではなくランダムである必要があり、必要なエントリは 1 つだけです。私はそれを解決しました:SELECT * FROM test WHERE id <> 4 ORDER BY rand() LIMIT 1.

この表では、列「first」と「last」は mmdd (両方とも整数) としてフォーマットされた日付です。したがって、John は 1 年のほとんどの時間、対応可能です。10月20日から8月14日まで。一方、Zara は短期間しか利用できません。12月1日から12月19日まで。

私の質問: 利用可能な人のみを選択するようにクエリを変更するにはどうすればよいですか? ジョンの場合、1020 と 0814 の間には何もないため、「between」は使用できません。

私はそれを理解することはできません.同様の問題を抱えている他の人がいるに違いありません.誰かが解決策を持っていますか?

敬具

4

1 に答える 1

3

2 つのケースを区別する必要があります。

  1. の場合first < last、日付は同じ年です。betweenその後、日付を一致させるために使用できます。

  2. の場合は、次の年であるfirst > lastことを意味します。lastこの場合、一致する日付はdate >= first OR date <= lastです。

したがって、WHERE句は次のようになります。

WHERE IF(first < last, @date BETWEEN first AND last,
                       @date >= first OR date <= last)
于 2013-08-18T01:22:47.060 に答える