php - OR 条件中的嵌套 SELECT
问题描述
(首先抱歉英语不好)
我的主要目的是从另一个 SELECT 中的另一个表中检索搜索查询
如果全名和昵称都在同一个表中,这是我的代码
if (isset($q)){
$query = 'SELECT * from names_list WHERE full_name LIKE \'%' . $q . '%\' OR nickname LIKE \'%' . $q . '%\'';
}
但由于它们不在同一张桌子上,我想替换OR nickname LIKE \'%' . $q . '%\'
为 etc 之类的东西,OR SELECT * from nicknames_list
但这样做时出错,那么实现这一目标的最佳做法是什么?
谢谢
这是 names_list 表示例
ID | 全名 | 姓 | 中间名字 | 名 |
---|---|---|---|---|
1 | 约翰·马克·怀特 | 白色的 | 马克 | 约翰 |
2 | 丹尼·塞缪尔·布朗 | 棕色的 | 塞缪尔 | 丹尼 |
3 | 贝拉·格雷 | 灰色的 | 贝拉 |
这是nicknames_list 示例
nick_id | ID | 昵称 |
---|---|---|
1 | 1 | 约翰约翰32 |
2 | 1 | 强尼32 |
3 | 2 | 丹尼12 |
4 | 3 | 贝拉1996 |
5 | 3 | 它的贝拉 |
解决方案
您可以通过 2 种方式解决此问题:
1.LEFT JOIN
您可以使用 aLEFT JOIN
来连接两个表。然后使用OR
条件过滤结果。
SELECT full_name, last_name, middle_name, first_name
FROM names_list
LEFT JOIN nicknames_list ON names_list.id = nicknames_list.id
WHERE full_name LIKE '%search_query%'
OR nickname LIKE '%search_query%';
2.UNION ALL
您可以使用UNION ALL
运算符来组合来自多个表的选择:
SELECT full_name, last_name, middle_name, first_name
FROM names_list
WHERE full_name LIKE '%search_query%'
UNION ALL
SELECT full_name, last_name, middle_name, first_name
FROM nicknames_list
JOIN names_list ON names_list.id = nicknames_list.id
WHERE nickname LIKE '%search_query%';
推荐阅读
- cordova - 离子框架:ITMS-90809:UIWebView API 弃用(遵循所有说明,但我收到弃用消息)
- c - 使用 AWS S3 预签名 URL 下载的 Word 文件以“受保护的视图”模式打开
- java - 使用 Spring-Boot 进行分布式事务回滚
- electron - 具有电子支持的 Cordova 插件
- r - 将带有特殊字符的管道分隔 csv 读入 R 时出现问题
- angular - HostListener 'scroll' 事件未触发,但 'mouseenter' 事件正常
- c - 获取 c 核心转储错误并尝试获取随机整数
- entity-framework - 我正在尝试使用 Oracle 数据库在 Entity Framework .NET 中使用数据库优先方法
- python - 如何从 JSON 对象中提取元素
- osgi - 如何在 Apache Felix Web 控制台中启用组件页面