php - 如何将搜索查询与连接表一起使用?
问题描述
我在数据库中有两个表。第一个表是“tb_ctsreport”,包含字段“qr_id、idNum、日期、时间”,另一个是“tb_usersreg”,包含许多字段,包括 idNum、firstName、lastName、age 和 address。我已使用此查询显示我的表:
$query = "SELECT * FROM tb_ctsreport LEFT JOIN tb_usersreg ON tb_ctsreport.idNum=tb_usersreg.idNum";
这给了我一个 qr_id、idNum、名称(连接的名字和姓氏)、日期、时间的结果表。然后我想从我创建的这个表中创建一个搜索查询,但是,我迷路了,我不知道在搜索时如何包含值 firstName 和 lastName,因为它被放置在另一个表中。这是我的工作查询,除了用于显示名称的未定义索引,因为我不知道如何。
$query = "SELECT * FROM tb_ctsreport WHERE CONCAT(qr_id, idNum, time, date) LIKE '%".$searchBox."%'";
我也尝试过这个 sql 查询,但只给了我一个错误。
$query = "SELECT * FROM tb_ctsreport WHERE CONCAT(qr_id, idNum, time, date) LIKE '%".$searchBox."%'
UNION
SELECT * FROM tb_usersreg WHERE CONCAT(lastName, firstName) LIKE '%".$searchBox."%'";
请帮我。我只是 php 的新手。谢谢!
解决方案
您可以WHERE
在 s 子句之后使用JOIN
子句。因此,您可以将 SQL 查询编写为:
SELECT *
FROM tb_ctsreport
LEFT JOIN tb_usersreg ON tb_ctsreport.idNum = tb_usersreg.idNum
WHERE
CONCAT(
tb_ctsreport.qr_id,
tb_ctsreport.idNum,
tb_ctsreport.time,
tb_ctsreport.date,
tb_usersreg.lastName,
tb_usersreg.firstName
) LIKE :searchBox
在上面的查询:searchBox
中是您的查询参数。
当您将用户输入与 SQL 查询连接时要小心,这会引入一个称为SQL 注入的巨大安全漏洞。您应该更喜欢使用参数化查询来避免这个问题。
当您在 SQL 查询中引用多个表时,我建议您始终使用列的完全限定名称以避免任何歧义。
推荐阅读
- c++ - 在一行中输入具有其他输入类型的多个字串
- list - 以功能风格将 elem 与下一个加入
- python - 有没有更有效的方法来使用 for 循环?
- git - 在拉取请求完成时自动重命名文件
- python - pygame.key.get_pressed() 在我的代码中不起作用,我不知道为什么
- bluetooth - 蓝牙阅读器和应用项目的可行性
- angular - 如何在 Angular 应用程序中处理来自观察者的大量 http 响应数据以避免浏览器崩溃?
- feathersjs - Quasar + Feathers-Vuex:如何整合?
- julia - 强化学习 SARSA 算法随时间减少值
- php - 我想获取我的下拉列表数据我写了一个代码但它不工作