Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何处理从联合select语句接收的数据_Php_Mysql - Fatal编程技术网

Php 如何处理从联合select语句接收的数据

Php 如何处理从联合select语句接收的数据,php,mysql,Php,Mysql,你好,我正在尝试为我的网站创建一个搜索功能。我有一个包含查询的方法 public function search_all($data) { $query = []; $result = $this->db->query(' SELECT blog_title FROM blog WHERE blog_title LIKE "%'. $data . '%" UNION SELECT body FROM blog WHE

你好,我正在尝试为我的网站创建一个搜索功能。我有一个包含查询的方法

public function search_all($data)
{
    $query = [];

    $result = $this->db->query('
        SELECT blog_title FROM blog WHERE blog_title LIKE "%'. $data . '%" 
        UNION
        SELECT body FROM blog WHERE body LIKE "%'. $data . '%" 
        UNION 
        SELECT username FROM users WHERE username LIKE "%'. $data . '%"
    ');

    while ($row = $result->fetch_assoc()) 
    {
        $query[] = $row;
    }

    $result->free();

    return $query;

    $mysqli->close();
}
然后我有了处理用户输入的方法

public function search()
{
    if (isset($_POST['search']))
    {
        $search_term = trim($_POST['search_term']);

        $terms = $this->search->search_all($search_term);

        foreach ($terms as $term) 
        {
            var_dump($term);
        }
    }
}
搜索有点有效。如果我搜索一个用户名或一个博客标题,那么我可以像这样回显它

echo $term['blog_title'];
如果我倒垃圾,我会得到

array (size=1)
    'blog_title' => string 'BillyBob' (length=8)
我的问题是为什么它总是把博客标题作为关键。我想我得做点什么

如果我想回应博客标题

echo $term['blog_title'];
如果我想回显用户名

echo $term['username'];

在两个表的并集中,两个表的字段应该相同,或者两个表的别名应该相同

请尝试此查询

$result = $this->db->query('
    SELECT body,blog_title,'' as username FROM blog WHERE blog_title LIKE "%'. $data . '%" OR body  LIKE "%'. $data . '%"  OR username  LIKE "%'. $data . '%"
    UNION 
    SELECT '' as body,'' as blog_title,username FROM users WHERE username LIKE "%'. $data . '%"
');

当搜索与博客标题、正文或用户名匹配时,此查询将选择记录。并且您将能够获取已获取记录的所有三个字段的值。

在两个表的并集中,两个表的字段应相同,或者两个表的别名应相同

请尝试此查询

$result = $this->db->query('
    SELECT body,blog_title,'' as username FROM blog WHERE blog_title LIKE "%'. $data . '%" OR body  LIKE "%'. $data . '%"  OR username  LIKE "%'. $data . '%"
    UNION 
    SELECT '' as body,'' as blog_title,username FROM users WHERE username LIKE "%'. $data . '%"
');

当搜索与博客标题、正文或用户名匹配时,此查询将选择记录。您将能够获取所获取记录的所有三个字段的值。

用户名是从另一个名为usersOk的表中检索的,blog和users表之间是否存在任何关系?没有关系。我希望用户能够搜索并找到用户或博客文章。当我遇到这个问题时,我正在尝试添加更多的联合,这样他们也可以找到其他东西。因此,在这种情况下,要么必须执行两个单独的查询,要么两个表的别名应该相同。例如,检查答案中的更新查询。用户名是从另一个名为usersOk的表中检索的,博客和users表之间是否存在任何关系?没有关系。我希望用户能够搜索并找到用户或博客文章。当我遇到这个问题时,我正在尝试添加更多的联合,这样他们也可以找到其他东西。因此,在这种情况下,要么必须执行两个单独的查询,要么两个表的别名应该相同。例如,检查答案中的更新查询。