0

以下に示すように、モデルで使用している SQL クエリを作成しました。

Tag.find_by_sql(["SELECT tags.id, tags.name, count(*) AS count FROM tags
    INNER JOIN taggings ON tags.id = taggings.tag_id
    WHERE 
    (taggings.taggable_type = 'Discussion' AND taggings.taggable_id IN (SELECT id FROM  `discussions` WHERE discussions.group_id = ?))
     GROUP BY tag_id ORDER BY ? LIMIT ?;", self.id, self.id, self.id, self.id, order, limit])

これは正常に機能し、必要なタグを引き出します。ただし、タグの順序が正しくありません。サーバー コンソールで、クエリの order ステートメントが次のようにアポストロフィで囲まれていることに気付きました。

ORDER BY 'count desc'

アポストロフィを削除すると、次のようになります。

ORDER BY count desc

クエリを手動で実行すると、タグが正しい順序でプルされます。アポストロフィがクエリに追加されるのを止める方法はありますか?

乾杯

トニー

4

1 に答える 1

0

理由は、列名をパラメータ化したためです

ORDER BY ?

渡した値はサニタイズされているため、 になり'count desc'ます。

設計上、列名とテーブル名を渡すことはできません。唯一の方法は、文字列内で列名を連結することです。

于 2013-01-16T16:06:26.623 に答える