复杂的sql查询使用两个表和regexp

时间:2012-08-09 23:16:14

标签: jquery sql regex autocomplete

我需要一些复杂查询的帮助。我正在使用 autocomplete jquery-ui 搜索一些用户和php + mysql进行搜索。

用户可以在wordpress / buddressress页面上注册first_namelast_nameemail(已请求的字段)。

所以,使用regexp轻松搜索我在stackoverflow上找到的一个例子,但我想要一个复杂的查询来搜索first_name或last_name或email。

first_nameemail位于 wp_users 表格中,last_name位于 wp_bp_xprofile_data 表格中。我不想让自定义元加入名称和电子邮件,

要获取first_nameemail,查询为:

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."

(value是last_name的结果,$ id = wp_users.ID)

如何混合此查询?
如果我们看到这就像一个表那样:selec * from users where first_name=regexp or last_name=regexp or email=regexp(基本上),但是由于wordpress / buddressress的复杂结构,我无法做到这一点。请帮忙!!!

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

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

Bonus:我正在使用regexp ^ $ params在开头字符处找到字符串。什么正则表达式更适合在各处找到这个结果?

2 个答案:

答案 0 :(得分: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)

感谢您的时间

答案 1 :(得分: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')