0

テーブルに order by 設定があり、このオプションでsettings変更order byしたいのですが、以下の SQL コマンドでこのオプションを使用sortableします。正しいSQLコマンドを教えてくださいsettingsORDER BY DATEsortableORDER BY ID

マイSQL:

SELECT 
      SQL_CALC_FOUND_ROWS i.* , 
                     c.title AS category_name, 
                     u.name, 
                     u.family, 
                     s.title AS status_title, 
                     i.thumb_image,
                     CONCAT( u.name, ' ', u.family ) AS author
      FROM   contents i
      JOIN   categories c ON c.id = i.category
      JOIN   users u ON u.id = i.posted_by
      JOIN   status_topics s ON s.id = i.t_status
      WHERE 
      i.portal = 0
              AND (CASE WHEN post_type = 4
                    THEN date(NOW()) BETWEEN i.from_dateTime AND i.to_dateTime 
                   ELSE post_type = 1
                   END)

                  (select sortable from settings) 
                  (case when sortable = 1 then 
                                 ORDER BY topic_date
                  case when sortable = 2 then 
                                 ORDER BY id
                  case when sortable = 3 then 
                                 ORDER BY public
                  end)

                  LIMIT 10
4

1 に答える 1

3

OPとの議論に基づいて、回答がわずかに変更されたことに注意してください。

次のように、 を のORDER BY 外側に置きます。CASE

... the first part of the query, then ...
ORDER BY
  CASE (SELECT sortable FROM settings)
    WHEN 1 THEN topic_date
    WHEN 2 THEN id
    WHEN 3 THEN public
  END
LIMIT 10

これは、 1行を(SELECT sortable FROM settings)返す場合にのみ機能することに注意してください。複数の行が返されると、エラーが発生します。ゼロ行が返された場合、エラーにはなりませんが、並べ替えオプションは選択されません。ORDER BY NULL

于 2013-06-12T15:16:17.543 に答える