2010-04-03 4 views
1

J'ai ce code, mais je ne peux pas le faire fonctionner:Rails plus de déclarations avec; le travail ne marche pas ...: s

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;') 

J'ai eu cette erreur:

Mysql :: Erreur: Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'SET @lower_limit: = ((5 DIV 6) * 6); EXECUTE stmt UTILISER @lower_limit 'à la ligne 1: PREPARER stmt FROM' SELECT * FROM images AS i WHERE i.on_id = 1 ET i.on_type = "profil" ORDER BY i.updated_at LIMIT?, 6 '; SET @lower_limit: = ((5 DIV 6) * 6); EXECUTE stmt UTILISER @lower_limit;

mais si j'utilise une application SQL, comme ça, ça marche:

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; 

RESOLU: Cela génère 2 requêtes et il est pire, mais maintenant je peux obtenir le décalage de l'image. L'inverse était avec une seule requête, mais je n'aurais aucun décalage de l'image, et de toute façon je ne pouvais pas le faire fonctionner.

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 

Répondre

Questions connexes