我有这种结构的桌子。
表1:用户(ID、用户名)

1, 'john777'
2, 'andy'
3, 'tom'

表2:用户元(元ID、用户ID、元名称、元值)
1, 1, 'first_name', 'John'
2, 1, 'last_name', 'Smith'
3, 2, 'first_name', 'Andy'
4, 2, 'last_name', 'Pete'
5, 3, 'first_name', 'Thomas'
6, 3, 'last_name', 'Tan'
7, 3, 'other_random_meta', 'abcxyz'

对于熟悉WordPress的人来说,这是他们的数据库结构。
我要做的是根据用户名和全名获取与我的搜索词匹配的用户的用户ID,由名字和姓氏组成。
换句话说,我希望搜索返回这些搜索词的1:
“约翰”,“约翰7”,“史密斯”,“约翰史密斯”,“史密斯乔”

最佳答案

SELECT DISTINCT ID FROM
(SELECT ID AS ID FROM users WHERE user_name LIKE 'YOURSEARCH%'
UNION
SELECT t1.user_id FROM
  (SELECT user_id, meta_value AS firstName FROM user_meta WHERE meta_name ='first_name') AS t1
INNER JOIN
  (SELECT user_id, meta_value AS lastName FROM user_meta WHERE meta_name ='last_name') AS t2 ON t1.user_id=t2.userID
WHERE concat_ws(' ',lastName,firstName) LIKE'YOURSEARCH%')

这将为您提供与搜索条件匹配的唯一用户ID

关于php - mySQL中的复杂查询(在多个表中搜索用户),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13201485/

10-11 03:32
查看更多