2014-06-25 3 views
0

J'écris une requête SQL pour WordPress qui recherche les événements qui sont en direct entre une recherche d'utilisateurs. Je suis en train de coder en dur pour tester.SQL renvoie des résultats en double

À l'heure actuelle, deux événements sont retournés pour chaque fois que le post_id apparaît dans la table wp_postmeta, quelqu'un peut-il voir où il pourrait y avoir un problème avec cette logique?

SELECT ID, post_title 
    FROM $wpdb->posts AS post 
    INNER JOIN $wpdb->postmeta AS meta 
    ON (post.ID = meta.post_id) 
    INNER JOIN $wpdb->postmeta AS meta2 
    ON (post.ID = meta2.post_id) 
    WHERE post.post_status = 'publish' 
    AND post.post_type = 'event' 
    AND post.post_author = '1' 
    AND (
      ((meta.meta_key = 'date_0_start-date' AND meta.meta_value < '20140620') AND (meta2.meta_key = 'date_0_end-date' AND meta2.meta_value > '20140630')) 
     OR ((meta.meta_key = 'date_0_start-date' AND meta.meta_value < '20140620') AND (meta2.meta_key = 'date_0_end-date' AND meta2.meta_value >= '20140620')) 
     OR ((meta.meta_key = 'date_0_start-date' AND meta.meta_value > '20140620') AND (meta.meta_key = 'date_0_start-date' AND meta.meta_value <= '20140630')) 
     OR ((meta.meta_key = 'date_0_start-date' AND meta.meta_value >= '20140620') AND (meta2.meta_key = 'date_0_end-date' AND meta2.meta_value <= '20140630')) 
    ) 

Répondre

1

Vous devez utiliser DISTINCT comme

SELECT DISTINCT ID, post_title

au lieu de

SELECT ID, post_title

+0

Parfait! Je vous remercie! – lukeseager

1

Si je comprends bien la question, je pense que vous avez besoin de cette dernière partie entre crochets de la où clause à ressembler à ceci

meta.meta_key = 'date_0_start-date' AND meta.meta_value <= '20140630' and 
meta2.meta_key = 'date_0_end-date' AND meta2.meta_value >= '20140620' 

Cela devrait correspondre à tous les événements qui se chevauchent la plage de dates « 20140620 » à « 20140630 »

+0

Merci, c'est beaucoup plus facile à lire que ma requête – lukeseager

Questions connexes