0

複雑なクエリについて助けが必要です。一部のユーザーの検索にはオートコンプリートjquery-uiを使用し、検索にはphp + mysqlを使用しています。

ユーザーは、wordpress/buddypress ページの と (必須フィールド) にfirst_name登録last_nameできます。email

だから、私がstackoverflowで見つけた例で正規表現を使って簡単に検索できますが、first_nameまたはlast_nameまたはemailで検索する複雑なクエリを作成したいです。

first_namewp_usersテーブルにあり、wp_bp_xprofile_dataemailテーブルあります。名前とメールを結合するカスタム メタを作成したくないので、last_name

first_nameとを取得するemailクエリは次のとおりです。

SELECT * FROM wp_users WHERE display_name REGEXP '^$param' OR user_email REGEXP '^$param'

de を取得するためlast_nameのクエリは次のとおりです。

SELECT value FROM wp_bp_xprofile_data WHERE field_id = 5 AND user_id = ".$id."

(値は last_name の結果で、$id=wp_users.ID)

このクエリをどのように組み合わせることができますか?
これを 1 つのテーブルのように見るとselec * from users where first_name=regexp or last_name=regexp or email=regexp、(基本的に) のようになりますが、wordpress/buddypress の複雑な構造により、これを行うことはできません。助けてください!!!

例: 3 人のユーザー、最初のユーザーの名前は oscar、2 番目のユーザーの姓は osbourne、3 番目のユーザーのメールアドレスは omnix.x@gmail.com で、検索が「o」で始まる場合、クエリはこの 3 人のユーザーを検索します。

PS: 忘れましたが、ID、名、姓、メールアドレスを返す必要があります。

おまけ: 正規表現 ^$params を使用して、開始文字の文字列を見つけています。どこでも結果でこれを見つけるには、どの正規表現が良いですか?

4

2 に答える 2

1

さて、正解は次のとおりです。

SELECT u.ID, u.display_name, u.user_email, d.value
FROM wp_users u, wp_bp_xprofile_data d
WHERE
(
  u.ID IN (
        SELECT ID
        FROM wp_users
        WHERE display_name REGEXP '^$param'
  )
  OR u.ID IN (
        SELECT user_id as ID2
        FROM wp_bp_xprofile_data
        WHERE field_id = 5 AND value REGEXP '^$param'
  )
)
AND (u.ID=d.user_id AND field_id=5)

御時間ありがとうございます

于 2012-08-13T16:37:42.973 に答える
0
SELECT * FROM wp_users
WHERE display_name REGEXP '^$param'
   OR user_email REGEXP '^$param'
   OR concat('.',id,'.') IN 
      (SELECT user_id FROM wp_bp_profile
       WHERE field_id = 5 AND value REGEXP '^$param')
于 2012-08-09T23:59:19.407 に答える