1

2つの日付の間のすべての日付を選択するクエリを作成しようとしています
これは私のクエリです:

$query = "SELECT DISTINCT * FROM D1,D2
    WHERE D1.DATE_ADDED BETWEEN '$date1' AND '$date2' AND D1.D1_ID = D2.D2_ID";

問題は、何も返さないが、エラーも発生しないことです。

だから私はこのようにphpMyAdminに直接入力してみました

SELECT DISTINCT * FROM D1,D2
    WHERE D1.DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'
        AND D1.D1_ID = D2.D2_ID`

その後、このように

SELECT DISTINCT * FROM D1,D2
    WHERE D1.DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'

そしてこのように

SELECT * FROM D1
    WHERE DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'

そして私はちょうど得る

MySQLは空の結果セット(つまり、ゼロ行)を返しました。(クエリには0.0003秒かかりました)

はい、私のテーブルは存在します、そして列も存在します:)

4

3 に答える 3

1

最初のケースでは、内部結合が原因で結果が得られない可能性があります。結果がセットに含まれるには、両方のテーブルにレコードが必要です。d2 も d2_id 列にその ID を持っていない限り、d1 からのレコードは表示されません。これを解決するには、それがビジネス ロジックに適している場合は、 を使用しますleft join

ただし、最後のケース (結合なし) は、最初の (左の) テーブル d1 に一致するレコードがないことが理由であることを示唆しています。

実行しているコードはすべて完全に有効であるため、完全なデータセットがなければ、これ以上コメントすることはできません。

于 2011-06-08T11:34:42.783 に答える
0

常に年全体を選択したい場合は、次のように選択する方が簡単です。

SELECT * FROM D1 WHERE YEAR(DATE_ADDED) = 2011;

于 2011-06-08T11:31:21.917 に答える