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

标签 php mysql wordpress

我有这种结构的表。

表 #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/

相关文章:

php - 如何在 php 中使用 Extjs 网格填充 mysql 数据库详细信息?

phpstorm 生成带有类型提示的 setter

php - 4D 为 PHP 连接 MySQL 设置用户名和密码

mysql - 为什么我的网站在我的 Web.config 中崩溃?

jquery - 未捕获的类型错误 : Cannot set property 'w' of undefined

php - 如何在 Laravel 中建立 belongsTo() 关系?

mysql - 将 JOIN 与 DISTINCT 结合使用并确定一张表的优先级

mysql - 我可以在表达式映射文件中添加 SQL 查询吗?

php - woocommerce_variable_add_to_cart 不适用于访客用户

php - 在 WooCommerce 中先显示当前类别,然后显示子类别