2017-08-10 19 views
0

MS Accessデータベースで直面している問題を啓発したいだけです。私は実際には単純なクエリ文から結果を得ることができますが、集計関数やグループ化関数を使用しているときはいつでもエラーが発生します。集計関数と集計関数のMS Accessクエリエラー

$rowno = 1; 

$query = "SELECT COL1, MIN(COL2) AS time_in, MAX(COL2) AS time_out FROM TBL 
     WHERE FORMAT(COL2, 'yyyy') = '2017' 
     GROUP BY COL1 
     ORDER BY COL2 DESC"; 

foreach ($dbh->query($query) as $row){ 
    echo $rowno . ") " . $row['COL1'] . " - " . $row['time_in'] . " - " . $row['time_out'] . "<br/>"; 
    $rowno++; 
} 

そして、それは私を与える:

警告:foreachのために供給無効な引数()で...

の機能はときに動作しなかった理由私の混乱があります実際に同じクエリ文が別のMS Accessデータベースと連携していますか?これは何かデータやバージョンの問題ですか?この文は、MIN()MAX()GROUP BYのものを削除したときに機能しています。

しかし、いずれにせよ、ここで私が現在使用しているデータベースで見ることができるサンプルデータがある:あなたが集計クエリを使用している間、文のBY

COL1   COL2 
1  8/10/2017 4:53:31 PM 
1  8/10/2017 4:50:31 PM 
2  8/10/2017 4:43:31 PM 
2  8/10/2017 4:40:31 PM 
3  8/10/2017 4:33:31 PM 
3  8/10/2017 4:30:31 PM 
+0

のプログラミングの部分はPHPだと思います。どのようにMS AccessとPHPを接続していますか?そして、これはMySQLとまったく何が関係していますか(タグ付けされているので)? –

+0

@ErikvonAsmuth私はそれがPHPとは関係ないと思います。問題はクエリステートメント自体にあります。接続は正常です、私はPDO ODBCのものを使用しています。さて、私はmysql(私はちょうど混乱している)を削除します。 – rhavendc

+0

PHPをWindows上で実行しているのですか、またはLinux用のサードパーティODBCドライバを使用していますか? –

答えて

2

ご注文は、総計ではありません。これは動作するはずです:

$query = "SELECT COL1, MIN(COL2) AS time_in, MAX(COL2) AS time_out FROM TBL 
     WHERE FORMAT(COL2, 'yyyy') = '2017' 
     GROUP BY COL1 
     ORDER BY MIN(COL2) DESC"; 

ご注文が集計でない場合、競合が発生する可能性があります。あなたは、次の表を持っていたと仮定します

COL1   COL2 
1  8/10/2017 4:53:31 PM 
1  8/10/2017 4:50:31 PM 
2  8/10/2017 4:59:31 PM 
2  8/10/2017 4:40:31 PM 

あなただけCOL2ことで、これをご注文いただいた場合、それはCOL1: 2前か後COL1: 1の集計行を置く必要がある場合は、アクセスが知っているだろう、COL1:2のため以来、COL2は、(高いの両方であります行3)と行(行4)の方が、COL1: 1

+0

はい、うまくいきました!しかしどうですか? ORDER BYで集計を使用するのはこれが初めてのことです。このような問題が発生したのは初めてのことです。それは日付形式のためですか?多分? – rhavendc

+0

いいえ、合計クエリを使用しています。つまり、行ごとに結果が集計されます。集計クエリで 'ORDER BY'を使用している場合は、集計(min、sum、maxなど)を使用するか、' GROUP BY'ステートメントにもある列を使用する必要があります。 –

+0

ああ。同じクエリステートメントが(ORDER BYで集計を使用しないで)別のAccessデータベースで正常に動作しているため、単なる奇妙です。しかし、とにかく、それは覚えておくべき教訓です。ありがとうございます! – rhavendc