mysql
  • sql
  • wordpress
  • meta-key
  • 2017-08-28 15 views 0 likes 
    0

    のuser_idが3つの基準を満たすすべてのuser_idを取得しようとしています。Wordpress Usermeta複数のキーと値を選択して

    私が持っているコードは

    $sql = " 
    SELECT user_id 
    FROM {$wpdb->usermeta} 
    WHERE (({$wpdb->usermeta}.meta_key = 'job_title' AND {$wpdb- 
    >usermeta}.meta_value = '".$job_title."') OR 
    ({$wpdb->usermeta}.meta_key = 'pmpro_bstate' AND {$wpdb- 
    >usermeta}.meta_value = '".$state."') OR 
    ({$wpdb->usermeta}.meta_key = 'pmpro_baddress2' AND {$wpdb- 
    >usermeta}.meta_value = '".$suburb."')) 
    GROUP BY 
        user_id 
    HAVING 
        COUNT(DISTINCT meta_key)=3"; 
    

    が低いです()正確にそれらを比較する値と変数に必要な?

    このクエリを実行するより効率的な方法はありますか?

    乾杯

    答えて

    0

    INNER JOINを使用してこれを行うにははるかに優れています:

    $sql = "SELECT u.ID 
    FROM wp_users u 
    INNER JOIN wp_usermeta m1 ON u.ID = m1.user_id AND m1.meta_key = 'job_title' 
    INNER JOIN wp_usermeta m2 ON u.ID = m2.user_id AND m2.meta_key = 'pmpro_bstate' 
    INNER JOIN wp_usermeta m3 ON u.ID = m3.user_id AND m3.meta_key = 'pmpro_baddress2' 
    WHERE m1.meta_value = '".$job_title."' 
    AND m2.meta_value = '".$state."' 
    AND m3.meta_value = '".$suburb."'" 
    
    +0

    INNERが使用することをお勧め登録しよなりますか?また、ご協力ありがとうございます – David

    +0

    各ジョインは、処理が速い小さなデータセットを作成します(MySQLサーバは、複数のテーブルを扱う他のメソッドよりもジョインを処理するように最適化されているため、他のメソッドよりもパフォーマンスが向上します) (特にLEFTとINNERを混ぜて使用すると)結合が遅くなる場合がありますが、この場合は、クエリーを読みやすく、データ処理に基づく方がはるかに高速です。 –

    関連する問題