【问题标题】:Single query to search in several tables and generate 1 result单个查询在多个表中搜索并生成 1 个结果
【发布时间】:2017-05-02 17:06:05
【问题描述】:

我正在尝试使用 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 请求?也许使用视图?

【问题讨论】:

    标签: php mysql ajax query-optimization


    【解决方案1】:

    我想这可能只是一个评论,但我不能这样评论:为什么不使用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%'
    

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

    【讨论】:

    • 谢谢!我不知道那个功能,我正在尝试使用 JOIN 但显然它不起作用。
    • 如果其他人阅读此答案,请快速注意:删除单个查询之间的“;”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2016-02-06
    • 2016-11-27
    • 1970-01-01
    • 2015-02-07
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多