您好我正在尝试为我的网站创建搜索功能。我有这个有查询的方法
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'];
如果我var_dump然后我得到类似
的东西array (size=1)
'blog_title' => string 'BillyBob' (length=8)
我的问题是为什么它总是以blog_title作为关键。我以为我必须做一些像
这样的事情如果我想回应博客标题
echo $term['blog_title'];
如果我想回复用户名
echo $term['username'];
答案 0 :(得分:3)
在两个表的并集中,两个表的字段应该相同,或者两个表的别名应该相同。
请尝试此查询。
$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 . '%"
');
当搜索与blog_title或正文或用户名匹配时,此查询将选择记录。并且您将能够为获取的记录获取所有三个字段的值。