このクエリが期待どおりに機能しない理由がわかりません。私は馬のテーブルとファイルテーブルを持っています。ファイル テーブルには列 "fk_object" と "fk_id" があるため、fk_object="horse_photo" と fk_id=725 のようなレコードを取得できます。ファイル テーブルには is_default 列と position 列も含まれているため、プロファイル画像となるファイル (写真) を取得できます。ただし、デフォルトの写真や最初の位置ファイルさえも取得していません。このクエリが期待どおりに機能しない理由と、適切な解決策を教えてください。ありがとう!
SELECT `horse`.`id`,
`horse`.`name`,
`file`.`id` AS `fid`,
`file`.`is_default`,
`file`.`position`
FROM `horse`
LEFT OUTER JOIN `file` ON (`file`.`fk_id`=`horse`.`id`
AND `file`.`fk_object`="horse_photo")
GROUP BY `horse`.`id`
ORDER BY `horse`.`id` ASC,
`file`.`is_default` DESC,
`file`.`position` ASC;
明確にするために、すべての馬とそのデフォルトの写真 (ある場合) を取得したいと考えています。
詳細: File.is_default は、0 または 1 のブール値です。File.position は、0 から始まる UNSIGNED INT です。結合されたファイルは、最初に is_default=1 である必要があり、次に File.position=0 (または最小の int) に解決されます。 .
私が得ている結果: horse.id ASC で並べ替えられたリストですが、結合されたファイルは最初のファイルのように見えます (プライマリ ID 列で並べ替えられています)。