我有这种结构的表。
表 #1:用户(ID,用户名)
1, 'john777'
2, 'andy'
3, 'tom'
表 #2:user_meta(meta_ID、user_ID、'meta_name'、'meta_value')
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: 'joh', 'john7', 'smith', 'john smi', 'smith jo'
最佳答案
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/