我有这种结构的表格。
表#1:用户(ID,user_name)
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的人来说,这是他们的数据库结构。 我想要做的是根据user_name和全名来获取与我的搜索词匹配的用户的用户ID,由first_name和last_name组成。
换句话说,我希望搜索为这些搜索字词返回1: 'joh','john7','smith','john smi','smith jo'
答案 0 :(得分:1)
SELECT * FROM
(
SELECT user_name AS user FROM users
UNION ALL
SELECT meta_value AS user FROM user_meta
WHERE meta_name = 'first_name' OR meta_name = 'last_name'
)
WHERE user LIKE '%your search%'
将返回符合条件的所有用户。重复项不会被删除并按原样返回。
要使用 SELECT COUNT(*) …
获取指示匹配数的单行,并且仅使用SELECT COUNT(*) > 0 …
获取0或1
好的,新查询。如果您想要匹配用户的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%'
答案 1 :(得分:1)
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