- - PR -
[MySQL] クエリの結果が明らかに正しくない
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-14 23:25
はじめまして。
PHP + MySQLにてWebAPLを作成中なのですが、とあるSELECTクエリの結果が 明らかに正しくないという事象が発生しています。 ・SELECT * FROM 〜 WHERE … → WHERE 条件にあてはまらない結果が数件混入する ・SELECT count(*) FROM 〜 WHERE … → WHERE 条件に該当する件数よりも数件多い応答がある デバッグのため、PHPから発行しているSQLをダンプして、それをそのまま mysql のCUIにコピペ、同じSELECTクエリを発行しました。すると、上記2つ のクエリとも、正しい結果が応答されました。 そこで、PHPのコード中で、同一のクエリを2回連続で発行してみました。 すると、1回目のクエリは、上記の最初の事象と同じ結果、2回目のクエリは 正しい結果、がそれぞれ応答されました。 症状からして、MySQL のバグ?と思えなくもないのですが、PHPのコード中、 特定の処理(別テーブルへのINSERT)を実行した後に、問題のSELECTクエリを 発行すると、この事象が発生するという点も気になるところです。 コード中、SELECTはかなりの数を発行していますが、表立って問題になっている のは1箇所のみです。 どなたか、似たような経験をお持ちの方はいらっしゃいませんでしょうか。 Linux Kernel:2.4.31 (レンタルサーバなのでディストリビューション不明) PHP: 4.4.0 (Zend Engine) | ||||||||||||
|
投稿日時: 2006-09-14 23:28
肝心な情報を書き忘れました。
MySQL: 4.0.25 | ||||||||||||
|
投稿日時: 2006-09-15 04:59
delete して commit する直前のテーブルを1回目の select で表示した直後にテーブルの状態が変わってしもてるので、その delete 後の状態の変わったテーブルを2回目の select で表示すると結果が違うもんになる・・・?
| ||||||||||||
|
投稿日時: 2006-09-15 06:43
もうひとつ重要な情報を忘れている。テーブル型は何? | ||||||||||||
|
投稿日時: 2006-09-15 07:12
http://www.atmarkit.co.jp/fnetwork/rensai/sql27/sql1.html
を参考にしてください MYSQLのトランザクションレベルはどれになるかわかりますか? | ||||||||||||
|
投稿日時: 2006-09-15 08:16
1回目、2回目の間に他のDBアクセスは発生していません。 また、1回目の結果に含まれる余計なレコードは、削除・更新問わず、 全く関係無いレコードです。 like '%hoge%' で検索して hoge1, hoge2, page1 が返ってくるような感じです。
MyISAMになります。
調べてみます。 ただ、MyISAMですので、LOCK/UNLOCKだけで、TRANSACTION/COMMIT は使用していません。 | ||||||||||||
|
投稿日時: 2006-09-15 12:28
SQLではなくPHPのコーディングミスのような気がします。
結果をどのように格納しているのかわかりませんが、ロジックを見直してみたほうが いいのではないでしょうか。 | ||||||||||||
|
投稿日時: 2006-09-15 20:59
こんにちは
条件にORとかANDがたくさんあったりしませんか? かっこで範囲の限定などはきちんとなされていますか? 差し支えない範囲でSQLを公開してみるのも早道だと思います。 | ||||||||||||
