Rails больше операторов с; не работает ...: s - PullRequest
1 голос
/ 03 апреля 2010

У меня есть этот код, но я не могу заставить его работать:

images = Image.find_by_sql('PREPARE stmt FROM \' SELECT * FROM images AS i WHERE i.on_id = 1 AND i.on_type = "profile" ORDER BY i.updated_at LIMIT ?, 6\'; SET @lower_limit := ((5 DIV 6) * 6);  EXECUTE stmt USING @lower_limit;')

Я получил эту ошибку:

Mysql :: Error: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'SET @lower_limit: = ((5 DIV 6) * 6); ВЫПОЛНИТЬ stmt, ИСПОЛЬЗУЯ @lower_limit 'в строке 1: ПОДГОТОВИТЬ СТМТ ИЗ' ВЫБРАТЬ * ИЗ ИЗОБРАЖЕНИЙ КАК i ГДЕ i.on_id = 1 И i.on_type = "profile" ЗАКАЗАТЬ i.updated_at LIMIT?, 6 '; SET @lower_limit: = ((5 DIV 6) * 6); EXECUTE stmt USING @lower_limit;

но если я использую приложение sql, вот так, оно работает:

PREPARE stmt FROM ' SELECT * FROM images AS i WHERE i.on_id = 1 AND i.on_type = "profile" ORDER BY i.updated_at LIMIT ?, 6'; SET @lower_limit := ((5 DIV 6) * 6);  EXECUTE stmt USING @lower_limit;

РЕШИТЬ: Это генерирует 2 запроса и хуже, но теперь я могу получить смещение изображения. Обратный путь был только с одним запросом, но я не получил бы никакого смещения изображения, и в любом случае я не мог заставить его работать.

def self.get_image_offset(id)
    image_offset = Image.find_by_sql("SELECT COUNT(id) as pos FROM images WHERE updated_at <= (SELECT updated_at FROM images WHERE id = #{id})")[0].pos.to_i
  end

  def self.get_group_offset(id, per_block, image_offset = nil)
    image_offset ||= Image.get_image_offset(id)
    group_offset = (image_offset / per_block).floor * per_block
    {:image_offset => image_offset, :group_offset => group_offset, :group_number => ( group_offset + per_block ) / per_block}
  end

1 Ответ

1 голос
/ 09 апреля 2010

Вам будет лучше использовать что-то вроде execute [1], если вы пишете весь sql самостоятельно (что на самом деле не «Rails way», но это совсем другая история)

[1] http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#M001934

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