php - 在多个表中搜索并生成 1 个结果的单个查询

标签 php mysql ajax query-optimization

我正在尝试使用 AJAX 创建一个强大的搜索,它在 3 个不同的表中查找结果并在一个表中返回答案。我通过向我的数据库添加 3 次调用(每个表一次)来实现此目的,但我觉得这不是最佳选择。

用户将在搜索字段中输入内容,我使用 AJAX 将他们输入的内容发送到数据库。此示例尽可能简单,以便于理解。

示例: 用户输入:测试。

AJAX 调用:

SELECT 'User' AS table, f_name AS `name`, city FROM people WHERE f_name LIKE '%test%';
SELECT 'Company' AS table, `name`, city FROM companies WHERE `name` LIKE '%test%';
SELECT 'Store' AS table, `name`, city FROM stores WHERE `name` LIKE '%test%';

我没有解释我是如何从 ajax 调用中生成表格的,因为那部分已经解决了。我目前在 PHP 中所做的是:

$sql = SELECT .... FROM people ....;
$res = mysqli...
while($row = mysqli_fetch...) {
   echo "<tr><td>{$row[table]}</td>...."

$sql = SELECT .... FROM companies ....;
$res = mysqli...
while($row = mysqli_fetch...) {
   echo "<tr><td>{$row[table]}</td>...."

$sql = SELECT .... FROM stores ....;
$res = mysqli...
while($row = mysqli_fetch...) {
   echo "<tr><td>{$row[table]}</td>...."

结果:

+--------------+-------+------+
| table        | name  | city |
+--------------+-------+------+
| User         | test1 | 13   |
| User         | test2 | 25   |
| Company      | testc | 13   |
| Store        | stest | 33   |
+--------------+-------+------+

是否有更简单的方法来实现这一目标,使用更少的 HTTP 请求?也许使用 View ?

最佳答案

我想这可能只是一条评论,但我不能这样评论:为什么不使用 UNION

SELECT 'User' AS table, f_name AS `name`, city FROM people WHERE f_name LIKE '%test%'
UNION
SELECT 'Company' AS table, `name`, city FROM companies WHERE `name` LIKE '%test%'
UNION
SELECT 'Store' AS table, `name`, city FROM stores WHERE `name` LIKE '%test%'

这会给你准确的结果,但只有一个查询字符串。

关于php - 在多个表中搜索并生成 1 个结果的单个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43743554/

相关文章:

php - Wordpress 自定义帖子类型列排序查询

php - 'function' 和 'use' 以及 'array_filter' 在 PHP 中如何工作?

php - 在 PHP 中过滤所有类型的空格

mysql - 拆分具有逗号分隔值的字段,并通过添加具有分隔值的其他行来更新同一字段

mysql - 尝试创建 SQL 过程但出现错误

javascript - 发送数据到 WebAPI (C#) GET 请求 Ajax 调用

asp.net - Asp.Net 4 Web 表单中 Ajax Url 到路由 WCF

php - 如何通过 ajax 将文本区域中的换行符传递给 PHP

jquery - 基于 Magento Ajax 的属性过滤器

php - 使用数据库驱动数据在 MS Excel 中创建动态下拉菜单