DataMapper (CodeIgniter の ORM) によって生成されたクエリがあり、あるサーバーでは結果を返しますが、別のサーバーでは返しません。
両方のデータベースはまったく同じです。このクエリは、MYSQL バージョン 5.1.41、5.1.63、および 5.5.20 のサーバーで機能し、5.1.52 では失敗します。
クエリは次のとおりです。
SELECT DISTINCT `clients`.`id`
FROM (`clients`)
LEFT OUTER JOIN `clients_locations`
clients_locations ON `clients`.`id` = `clients_locations`.`client_id`
LEFT OUTER JOIN `locations`
locations ON `locations`.`id` = `clients_locations`.`location_id`
LEFT OUTER JOIN `reports`
location_reports ON `locations`.`id` = `location_reports`.`location_id`
WHERE
`location_reports`.`id` = 1
AND
`clients`.`id` = 2
いくつかのテストを行ったところ、次のことがわかりました。
WHERE 句が 1 つしかない場合は、結果が返されます。演算子のいずれかを LIKE、!= などに
変更 すると、結果が返されます。AND を OR に変更すると、結果が返されます。
同様のクエリがサイト全体で使用されているため、なぜこれが失敗しているのかわかりません。例えば:
SELECT DISTINCT `clients`.`id`
FROM (`clients`)
LEFT OUTER JOIN `clients_locations`
clients_locations ON `clients`.`id` = `clients_locations`.`client_id`
LEFT OUTER JOIN `locations`
locations ON `locations`.`id` = `clients_locations`.`location_id`
LEFT OUTER JOIN
`locations_questionnaires` location_locations_questionnaires
ON
`locations`.`id` = `location_locations_questionnaires`.`location_id`
WHERE
`location_locations_questionnaires`.`questionnaire_id` = 3
AND
`clients`.`id` = 2
上記のすべてのサーバーで正しい結果を返します。
誰もこれを見たことがありますか?
明確にするために:
SQL は ORM によって生成されるため、編集できません。
両方のデータセットはまったく同じです。
問題は、一方のサーバーではクエリが結果を返さないのに、もう一方のサーバーでは結果を返さない理由です。
UPDATE : サーバーを 5.1.61 にアップグレードしたところ、クエリは正常に実行されます。5.1.52 のバグのようです。