0

問い合わせがあります...

SELECT p.* 
FROM   wp_posts p 
       JOIN wp_postmeta pm 
         ON pm.post_id = p.ID 
       JOIN wp_postmeta pmd 
         ON pmd.post_id = p.ID 
WHERE  p.post_type = 'event' 
       AND p.post_status = 'publish' 
       AND ( pm.meta_key = 'post_city_id' 
             AND ( pm.meta_value = '1' ) ) 
       AND ( pmd.meta_key = 'end_date' 
             AND pmd.meta_value >= '2012-05-27' ) 
ORDER  BY p.post_date ASC, 
          p.post_title ASC 
LIMIT  5 

end_date と end_time は、特定の投稿が Web サイトに表示されなくなる日付 (Ymd 形式) と時刻に相当する値が割り当てられたメタ キーです。p.post_date asc を pmd.meta_key='end_date' asc,pmd.meta_key='end_time' asc のように変更したいのですが、これを行う最善の方法がわかりません。何かご意見は?

4

1 に答える 1

1

何を並べ替えようとしているかという質問からは 100% わかりませんが、同じテーブルの 2 つの値をリンク (および並べ替え) したい場合は、次のように実行できます。

SELECT p.*
FROM wp_posts p  
  JOIN wp_postmeta pm ON pm.post_id=p.ID AND pm.meta_key='post_city_id' AND pm.meta_value='1' 
  JOIN wp_postmeta pmd ON pmd.post_id=p.ID AND pmd.meta_key='end_date' AND pmd.meta_value>='2012-05-27'
  JOIN wp_postmeta pmt ON pmt.post_id=p.ID AND pmt.meta_key='end_time'
WHERE p.post_type='event' and p.post_status='publish'  
ORDER BY pmd.meta_value, pmt.meta_value
LIMIT 5 

これにより、キー = "end_date" である postmeta 値でソートされた結果が得られ、その後にキー = "end_time" である postmeta が続きます。

(「WHERE」も JOIN に移動しました。これにより、読みやすくなります。必須ではありませんが、読み取り/デバッグには適していて、同じ結果になります。)

于 2012-05-28T04:06:54.253 に答える