原理是先把所有数据的ID查出来,再把限制条件的ID查出来,最后根据条件只返回限制的ID(经初步分析wordresss在得到ids集后 又会调用post方法去array_map的方式循环调用post数据,不知道有什么用意)
- string(217) "SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.post_date DESC LIMIT 0, 10"
- string(645) "SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) INNER JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND (
- ( wp_postmeta.meta_key = 'key1' AND wp_postmeta.meta_value = 'value1' )
- AND
- ( mt1.meta_key = 'key2' AND mt1.meta_value = 'key2' )
- AND
- ( mt2.meta_key = 'term_tpl' AND mt2.meta_value = 'index' )
- ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10"
- string(176) "SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.ID IN (5) AND wp_posts.post_type = 'post' AND ((wp_posts.post_status = 'publish')) ORDER BY wp_posts.post_date DESC "
复制代码
关键就是纵表竖表查询的语句- SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND (
- ( wp_postmeta.meta_key = 'term_tpl' AND wp_postmeta.meta_value = 'index' )
- AND
- ( mt1.meta_key = 'term_hook' AND mt1.meta_value = 'abcd' )
- ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date ASC LIMIT 0, 4
复制代码
网上资料参考- SELECT wp.*, wpm1.meta_value AS `propert_type`,
- wpm2.meta_value AS `property_amount`
- FROM
- wp_posts wp
- LEFT JOIN wp_postmeta wpm1 ON (wp.ID = wpm1.post_id)
- LEFT JOIN wp_postmeta wpm2 ON (wp.ID = wpm2.post_id)
- INNER JOIN wp_term_relationships wptr ON (wp.ID = wptr.object_id)
- INNER JOIN `wp_term_taxonomy` wptt ON (wptr.term_taxonomy_id = wptt.term_taxonomy_id)
- INNER JOIN wp_terms wpt ON (wptt.term_id = wpt.term_id)
- WHERE wpt.term_id = '12' AND wptr.term_taxonomy_id = '12'
- AND wp.post_type = 'property' AND wp.post_status = 'publish'
- AND wpm1.meta_key = 'property_land_type'
- AND wpm2.meta_key = 'property_amount'
- AND REPLACE( REPLACE(wpm2.meta_value, ',', ''), '"', '' ) >= 1
- AND wpm1.meta_value IN ('L','H','C') AND wpm1.meta_value IS NOT NULL AND wpm2.meta_value IS NOT NULL
- GROUP BY wp.ID ORDER BY REPLACE( REPLACE(wpm2.meta_value, ',', ''), '"', '' ) DESC
- LIMIT 0, 10
复制代码
|