0

この以下のSQLコマンドで、どのトピックを通常の投稿または静的ページに表示する必要があるかを選択するオプションを追加したいですか?

設定テーブルには、このオプションを変更するための default_front_page があります。このフィールドが 0 でない場合、SQL コマンドは fetch static page である必要があります

default_front_pageは静的ページ ID で、i.id はトピック ID です。

通常または静的ページなどのすべての投稿はコンテンツテーブルに分割され、post_type フィールドを使用して、この投稿が通常または静的であると推測できます。このコードでの問題は何ですか?

SELECT 
     SQL_CALC_FOUND_ROWS i.* , 
     c.title AS category_name, 
     u.name, 
     u.family, 
     i.thumb_image,
     CONCAT( u.name, ' ', u.family ) AS author,
     tumbnail_image_width,
     tumbnail_image_height,
     CASE (s.sortable)
        WHEN 3 THEN 100000000 - i.id 
        WHEN 2 THEN i.date_time
        WHEN 1 THEN i.order_display
     END  AS SortField
  FROM   contents i
  JOIN   categories c ON c.id = i.category
  JOIN   users u ON u.id = i.posted_by
  JOIN   settings s ON s.portal = i.portal
  WHERE 
         i.portal = '{$portal_id}'
         AND CASE WHEN post_type = 4
              THEN date(NOW()) BETWEEN i.from_dateTime AND i.to_dateTime 
         ELSE post_type = 1
         END
  AND i.t_status = 1 AND 
         CASE WHEN s.default_front_page <> 0 
              THEN i.id = s.default_front_page
         END 
  ORDER BY SortField                  
  LIMIT {$portalSettings['display_post_count']};
4

1 に答える 1

0

句で使用CASEする必要はありません。そしてそれをするべきです:WHEREANDOR

WHERE 
     i.portal = '{$portal_id}'
     AND (
           (post_type = 4 
             AND date(NOW()) BETWEEN i.from_dateTime AND i.to_dateTime
           )
           OR post_type = 1
         )         
     AND i.t_status = 1 
     AND (s.default_front_page = 0 OR i.id = s.default_front_page)
于 2013-09-17T12:36:07.170 に答える