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