Mysql2 :: Ошибка: столбец «create_at» в предложении заказа является неоднозначным - PullRequest
3 голосов
/ 02 мая 2011

У меня есть следующий запрос, который работает правильно

ObjectItem.find(:all, :include => :object_groups, :conditions =>  "object_items.description LIKE '%#{search}%' OR object_groups.description LIKE '%#{search}%'", :order => 'object_items.created_at DESC')

Но выполнение запроса таким способом устарело, поэтому я пытаюсь перейти на эту форму

ObjectItem.order('object_items.created_at DESC').includes(:object_groups).where("object_items.description LIKE '%#{search}%' OR object_groups.description LIKE '%#{search}%'")

Но я получаю следующую ошибку:

Mysql2::Error: Column created_at in order clause is ambiguous: SELECT  DISTINCT `object_items`.id FROM `object_items` LEFT OUTER JOIN `object_groups_object_items` ON `object_groups_object_items`.`object_item_id` = `object_items`.`id` LEFT OUTER JOIN `object_groups` ON `object_groups`.`id` = `object_groups_object_items`.`object_group_id` WHERE (object_items.description LIKE '%%' OR object_groups.description LIKE '%%') ORDER BY object_items.created_at DESC, created_at DESC  LIMIT 20 OFFSET 0

Ответы [ 6 ]

14 голосов
/ 02 декабря 2013

order ('users.created_at DESC')

В основном проблема заключается в том, что существует запрос соединения, вероятно, поэтому обе таблицы имеют поле create_at, поэтому она выдает ошибку.если вы хотите упорядочить результат в соответствии с тем, какие таблицы созданы_, используя таблицу_имя_поля_, по которой вы упорядочиваете результат.

1 голос
/ 12 мая 2015

попробуйте это: заказ ('users.created_at DESC') или же заказ (созданный:: asc)

должно работать на то же самое

1 голос
/ 29 мая 2012
ORDER BY object_items.created_at DESC, created_at DESC LIMIT 20 OFFSET 0

Как и в предыдущем ответе, у него есть висящий "create_at", который может ссылаться на столбец в любой таблице.

Это явно не тот, который вы непосредственно передаете с .order- так что, возможно, у вас есть область по умолчанию с порядком по умолчанию где-то в вашей модели.Если вы явно сделаете это object_items.created_at, это может решить проблему.

0 голосов
/ 01 июня 2013

Я столкнулся с этим сегодня в проекте Шпрее. Это почти всегда вызвано отсутствием имени таблицы в предложении order. Посмотрите этот билет, чтобы узнать, как я решил проблему: https://github.com/spree/spree/issues/2654

В моем случае я добавил декоратор к одной из моих моделей веселья, и он добавлял предложение порядка без соответствующего имени таблицы.

0 голосов
/ 14 июня 2012

Как вы определили отношение object_groups в модели ObjectItem?

ORDER BY create_ar DESC может быть добавлен в запрос, если у вас есть отношение, аналогичное следующему в ObjectItem:

has_many :object_groups, :order => "created_at DESC"
0 голосов
/ 02 мая 2011

Обычно это результат появления одного и того же имени поля в нескольких таблицах.

В вашем случае это выглядит так, как будто object_items и object_groups имеют одно и то же поле create_at.

Лучше всего (на мой взгляд) было бы переименовать поле в одной из таблиц, например, используя префикс к имени поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...