0

对于复杂的查询,我需要一些帮助。我正在使用自动完成 jquery-ui搜索一些用户和 php+mysql 进行搜索。

用户可以在 wordpress/buddypress 页面上使用他的first_name,last_name和(必填字段)进行注册。email

因此,在我在 stackoverflow 上找到的示例中使用正则表达式很容易搜索,但我想要一个复杂的查询来按 first_name 或 last_name 或电子邮件进行搜索。

first_name并且emailwp_users表中并且last_namewp_bp_xprofile_data表中。我不想制作自定义元数据来加入姓名和电子邮件,所以,

要获得first_nameand 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)

如何混合这个查询?
如果我们看到它像一张桌子,它会像:(selec * from users where first_name=regexp or last_name=regexp or email=regexp基本上),但由于 wordpress/buddypress 的复杂结构,我不能这样做。请帮忙!!!

eg...3 个用户,第一个用户的名字是 oscar,第二个用户的姓氏是 osbourne,第三个用户的电子邮件是 omnix.x@gmail.com,如果搜索以 'o' 开头,查询将找到这 3 个用户。

PS:我忘记了,但我需要返回身份证、名字、姓氏和电子邮件。

奖励:我正在使用正则表达式 ^$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 回答