首页 > 解决方案 > 如何将搜索查询与连接表一起使用?

问题描述

我在数据库中有两个表。第一个表是“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 的新手。谢谢!

标签: phpmysql

解决方案


您可以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 查询中引用多个表时,我建议您始终使用列的完全限定名称以避免任何歧义。


推荐阅读