Php mySQL中的复杂查询(在多个表中搜索用户)

Php mySQL中的复杂查询(在多个表中搜索用户),php,mysql,wordpress,Php,Mysql,Wordpress,我有这种结构的桌子 表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_

我有这种结构的桌子

表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: “joh”、“john7”、“smith”、“john smi”、“smith jo”

将返回与您的条件匹配的所有用户。重复项不会按原样消除和返回

要获取指示匹配数的单行,请使用SELECT COUNT*…并仅获取0或1,请使用SELECT COUNT*>0…

好的,新的问题。如果需要匹配用户的ID,则必须将两个表连接在一起:

SELECT DISTINCT u.user_id
FROM users u
JOIN user_meta m
ON u.user_id = m.user_id
WHERE u.user_name LIKE '%name%' OR m.first_name LIKE '%name%' OR m.last_name LIKE '%name%'

这将获得与搜索条件匹配的唯一用户ID

问题是如何编写查询以获得上述结果。抱歉,还有一件事需要澄清,用户元表可能包含其他随机元,如用户的电子邮件。我只想从连在一起的名字和姓氏中搜索。@jon:好的。但这就像添加WHERE子句一样简单,没有什么复杂的…谢谢你的回复,但我认为你并不完全理解我在寻找什么。为我的错误解释道歉。实际上,我想获得与搜索查询匹配的用户ID。你的查询只给了我每个部分的匹配项。@jon:噢,我还以为当有匹配项时你想要1为真。我将添加另一个查询,但它也不复杂,它只是一个简单的连接
SELECT DISTINCT u.user_id
FROM users u
JOIN user_meta m
ON u.user_id = m.user_id
WHERE u.user_name LIKE '%name%' OR m.first_name LIKE '%name%' OR m.last_name LIKE '%name%'
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%')