我需要一些复杂查询的帮助。我正在使用 autocomplete jquery-ui 搜索一些用户和php + mysql进行搜索。
用户可以在wordpress / buddressress页面上注册first_name
,last_name
和email
(已请求的字段)。
所以,使用regexp轻松搜索我在stackoverflow上找到的一个例子,但我想要一个复杂的查询来搜索first_name或last_name或email。
first_name
和email
位于 wp_users 表格中,last_name
位于 wp_bp_xprofile_data 表格中。我不想让自定义元加入名称和电子邮件,
要获取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."
(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在开头字符处找到字符串。什么正则表达式更适合在各处找到这个结果?
答案 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')