1

wp_postmeta テーブルに(meta_key='propdetails' AND meta_value LIKE '%Vacant Unrented Ready%')、またはがあるすべての投稿を取得しようとしています(meta_key='featured' AND meta_value='on')

meta_key 'featured' 行が見つからない場合を除いて、私の既存のクエリ (以下) は機能しています。その後、その投稿は返されません。

meta_value同様に、行を一致させるには、 whereを取得する必要がありmeta_key='martygeocoderlatlng'ます。ただし、その meta_key が欠落している場合、その投稿全体がまったく返されません。

したがって、既存のクエリと makemeta_key='featured'またはmeta_key='martygeocoderlatlng'optional を取得する必要があるため、それらが存在しない場合でも、他の比較を行って必要なデータを取得できます。

(これは何らかの形で OUTER JOIN で行われると思いますが、構文を完全に整理することはできません。)

これは、meta_key='featured' および meta_key='martygeocoderlatlng' が wp_postmeta テーブルに存在する行のみを返す既存のクエリです (もちろん、WHERE 句の他の条件が満たされています)。

SELECT 
    p.*,
    pm.*,
    pm_featured.meta_value AS featured,
    pm_latlng.meta_value AS latlng

FROM 
    wp_posts p
    JOIN wp_postmeta pm
      ON pm.post_id = p.ID
    JOIN wp_postmeta pm_propdetails
      ON (pm_propdetails.post_id = p.ID AND pm_propdetails.meta_key = 'propdetails')
    JOIN wp_postmeta pm_featured
      ON (pm_featured.post_id = p.ID AND pm_featured.meta_key = 'featured-property')
    JOIN wp_postmeta pm_latlng
      ON (pm_latlng.post_id = p.ID AND pm_latlng.meta_key = 'martygeocoderlatlng')

    JOIN wp_term_relationships tr
      ON tr.object_id = p.ID
    JOIN wp_term_relationships tr_taxrel
      ON (tr_taxrel.object_id = p.ID AND tr_taxrel.term_taxonomy_id = 12)

WHERE
    (pm_propdetails.meta_value LIKE '%Vacant Unrented Ready%'
        OR
     pm_featured.meta_value = 'on')

    AND p.post_type = 'property'
    AND p.post_status = 'publish'

GROUP BY p.ID
ORDER BY p.post_date DESC
4

1 に答える 1