2017-05-21 29 views
0

私はうまく動作していないwordpressの選択クエリに苦労しています。変な部分は、現在実行中のWebサイトで2つの選択クエリが1つあり、動作することです。ローカルテストマシンではほぼ同じ選択クエリが動作していません。ここでワードプレス選択クエリが機能しない

が働いているライブからの問合せ、次のとおりです。

SELECT DISTINCT users.* 
    FROM wp_users as users 
    INNER JOIN wp_usermeta as mt 
     ON (users.ID = mt.user_id) 
    WHERE 1=1 
     AND (mt.meta_value LIKE '%Trainer%') 
     AND (mt.meta_key = '_upme_search_cache' AND mt.meta_value LIKE '%ACTIVE%') 
     AND ( (mt.meta_key = '_upme_search_cache' AND mt.meta_value NOT LIKE '%administrator%') 
      AND (mt.meta_key = '_upme_search_cache' AND mt.meta_value NOT LIKE '%sportentrainer%')) 
    ORDER BY users.user_registered asc LIMIT 9 

そして、ここにローカルマシンからの問合せ:検索するときに

SELECT DISTINCT users.* 
    FROM wp_users as users 
    INNER JOIN wp_usermeta as mt 
     ON (users.ID = mt.user_id) 
    WHERE 1=1 
     AND (mt.meta_value LIKE '%trainer%') 
     AND (mt.meta_key = 'sent_activation_status' AND mt.meta_value LIKE '%ACTIVE%') 
     AND ( (mt.meta_key = 'account_type' AND mt.meta_value NOT LIKE '%administrator%') 
      OR (mt.meta_key = 'account_type' AND mt.meta_value NOT LIKE '%sportentrainer%')) 
    ORDER BY users.user_registered asc LIMIT 9 

meta_key 2番目のクエリでは、すべての検出されました彼らのために別々に。あなたはmeta_keysが異なっていることに気付きましたが、それは問題ではありません。

最初のクエリはphpmyadmin:4.1.9とmysql:5.0.12(正しい場合)のライブバージョンで実行され、2番目のクエリはphpmyadmin:4.6.6とmysql:5.6のローカルバージョンで実行されます。 35

誰かが2番目のクエリが機能しない理由を確認できますか?

+1

_not working_は、クエリが結果を返さないことを意味しますか?もしそうなら、おそらく最良のことは、クエリを単純化することによってデバッグすることです。 1つの 'AND' /' OR'条件で開始し、クエリを実行し、その時点までデータを取得したかどうかを確認し、条件を追加し、結果を再度確認し、切断を見つけるまで続行します。たぶんあなたの期待に合ったテーブルの中に何もありませんか?もし存在するならば、おそらく条件は正確に定式化されていないでしょうか? MySQLのバージョンでは、このクエリと実際には違いはありません。 –

+0

作業していないと、0の結果が返されます。私は1つだけを使用し、結果を返します。したがって、最初のクエリでは結果が返されますが、meta_keysを変更するだけで結果は0になりますが、phpmyadminでmeta_keysと特定の値を検索すると結果も返されます。したがって、meta_keysはそこにあります。 – udarts

答えて

0

それが原因で、以下の条件のいずれかの結果を返しません。

AND (mt.meta_key = 'sent_activation_status' AND mt.meta_value LIKE '%ACTIVE%') 
AND ((mt.meta_key = 'account_type' AND mt.meta_value NOT LIKE '%administrator%') 
      OR (mt.meta_key = 'account_type' AND mt.meta_value NOT LIKE '%sportentrainer%')) 

あなたが上記の条件を見れば、それはmeta_keysent_activation_statusをすることはできませんようmt.meta_key = 'sent_activation_status' AND mt.meta_key = 'account_type'は、今、これは可能ではないだろうと言います同時に、account_typeとなります。

結果を取得する場合は、ANDではなくORを使用する必要があります。

+0

HIダルシャン、返信のおかげで、依然として同じ結果が0を返します。 – udarts

+0

私は次のSQLを試しました: 'SELECT DISTINCT users。* from wp_users from users INNER JOIN mt ON(users.ID = mt.user_id)WHERE 1 = 1 AND(mt.meta_value LIKE '%trainer%')AND(mt.meta_key = 'sent_activation_status' AND mt.meta_value LIKE '%ACTIVE%') 'は動作しませんが、実行時のみ:' SELECT DISTINCT users 。* wp_usersからユーザーとしてINNER JOIN mt ON(users.ID = mt.user_id)WHERE 1 = 1 AND(mt.meta_value LIKE '%trainer%') 'それは動作します。私は混乱しています。 – udarts

+0

@udarts私は答えを –

関連する問題