Я не понимаю, почему этот запрос работает не так, как ожидалось. У меня есть стол для стола и столик для стола. В таблице файлов есть столбцы «fk_object» и «fk_id», поэтому я могу получить записи, такие как fk_object = «horse_photo» и fk_id = 725. В таблице файлов также есть столбцы is_default и position, поэтому я могу захватить файл (фотографию), который должен быть его профилем. Тем не менее, я не получаю файл по умолчанию или даже файл первой позиции. Может кто-нибудь объяснить мне, почему этот запрос работает не так, как ожидалось, и каким будет надлежащее решение? Благодаря!MySQL заказывает результаты соединения
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 беззнаковая INT, начиная с 0. Файл вступил сначала должно быть is_default = 1, а затем решить, чтобы File.position = 0 (или наименьший int).
Результаты, которые я получаю: Список, отсортированный по horse.id ASC, однако связанный с ним файл является только первым файлом (упорядоченным по столбцу первичного идентификатора).
Это дало мне синтаксическую ошибку из-за GROUP BY 'file'.'id' AS' fid' ... если я изменил ее на просто 'file'.'id' или' fid', она выполняется. Тем не менее, это дает мне строку для каждого файла. Это намеченный результат? – jymboche
Я собирался сказать, что запрос зависит от данных, имеющих отношение 1 к 1, если для каждой лошади может быть более одного файла, вам нужно будет отредактировать соединение, чтобы вернуть только один файл. – collusionbdbh
Игнорируйте последний комментарий от меня. Я бы предположил, что это так, но если вы не хотите получать изображение лошади для каждой лошади, вам нужно будет объяснить немного точнее, какой именно результат вы пытаетесь получить. – collusionbdbh