0

これは私が試したものですが、うまくいきませんでした。

SELECT COUNT(*) AS month_count
FROM `wp_postmeta`
WHERE
     `meta_key`='from_dt' AND
      (`meta_value` BETWEEN '$st' AND '$end') AND
      (`meta_value` BETWEEN '$st1' AND '$end1');

今年のエポック時間 $st と $end の間、および来年の $st1 と $end1 の間の月数を数えようとしています。meta_value フィールドに 2 つの日付 (2013 年 2 月と 2014 年 2 月) があるとすると、クエリは 2 を返します (2 月が 2 つあるため)。

1つのSQL文で演算子間で2を使用する方法は?

4

5 に答える 5

2

クエリに技術的な問題はありませんが、目的の結果によっては、おそらく使用したいでしょうOR- 括弧が正しい場所にあることを確認してください:

SELECT COUNT(*) AS month_count
FROM `wp_postmeta`
WHERE
     `meta_key`='from_dt' AND
      ((`meta_value` BETWEEN '$st' AND '$end') OR
      (`meta_value` BETWEEN '$st1' AND '$end1'))

現在のクエリでは、meta_value が両方の数値セットの間にある必要があり、これが問題になる可能性があります。

于 2013-05-02T14:05:49.470 に答える
0

AND ではなく OR が必要だと思います。AND ビットでは条件を満たす必要があるのに対し、OR では 1 つの条件で十分であると考えてください。

于 2013-05-02T14:07:41.260 に答える
0

これのことですか?

SELECT COUNT(*) AS month_count
FROM `wp_postmeta`
WHERE
      (`meta_key`='from_dt' AND `meta_value` BETWEEN '$st' AND '$end') OR
      (`meta_key`='from_dt' AND `meta_value` BETWEEN '$st1' AND '$end1')
于 2013-05-02T14:05:33.700 に答える
0

これらの範囲内にある 2 つの異なる行を探している可能性があります。そのためには、having句を使用します。

SELECT COUNT(*) AS month_count
FROM `wp_postmeta`
WHERE `meta_key`='from_dt'
having sum(case when `meta_value` BETWEEN '$st' AND '$end' then 1 else 0 end) > 0 AND
       sum(case when `meta_value` BETWEEN '$st1' AND '$end1' then 1 else 0 end) > 0);
于 2013-05-02T14:05:50.040 に答える
0
SELECT COUNT(*) AS month_count 
FROM `wp_postmeta` 
WHERE `meta_key`='from_dt' AND
(`meta_value` BETWEEN '$st' AND '$end') OR (`meta_value` BETWEEN '$st1' AND '$end1');
于 2013-05-02T14:06:10.567 に答える