PHP mysql使用关键字搜索多个表
Posted
技术标签:
【中文标题】PHP mysql使用关键字搜索多个表【英文标题】:PHP mysql search multiple tables using a keyword 【发布时间】:2011-09-28 07:24:44 【问题描述】:我的数据库中有三个表:
messages
topics
comments
每个表格都有两个字段,分别称为“内容”和“标题”。我希望能够在我的 sql 语句中使用“Like”来查看“messages.content”、“messages.title”、“topics.content”、“topics.title”、“cmets.content”和“cmets”。标题'使用关键字。
到目前为止,我的查询只能从一个表中找到结果:
mysql_query("SELECT * FROM messages
WHERE content LIKE '%" . $keyword . "%'
OR title LIKE '%" . $keyword ."%'");
我也想知道,一旦我从多个表中获取结果,我怎么知道哪个表的结果是什么?
任何帮助将不胜感激!
【问题讨论】:
你不只是做 3 个不同的查询有什么原因吗?这些列可能并不相同。 全文搜索 (FTS) 是推荐的方法 - MySQL has native syntax, but it's for MyISAM only。否则,您必须寻求第三方支持,例如 Sphinx。 【参考方案1】:您可能正在寻找的是 UNION 命令:
SELECT id, 'messages' as 'table' FROM messages
WHERE content LIKE '%keyword%'
OR title LIKE '%keyword%'
UNION
SELECT id, 'topics' as 'table' FROM topics
WHERE content LIKE '%keyword%'
OR title LIKE '%keyword%'
UNION
SELECT id, 'comments' as 'table' FROM comments
WHERE content LIKE '%keyword%'
OR title LIKE '%keyword%'
【讨论】:
【参考方案2】:html 搜索表单:
<div class="header_top_right">
<form action="search.php" method="GET" class="search_form">
<input type="text" placeholder="Text to Search.." name="search">
<input type="submit" class="btn btn-default" value="">
</form>
</div>
搜索.php:
<?php
if (isset($_GET['search']) || !empty($_GET['search']))
$search = mysqli_real_escape_string($db->link, $fm->validation($_GET['search']));
else
header("Location:404.php");
?>
<?php
$query = "SELECT * FROM news_post WHERE title LIKE '%$search%' OR body LIKE '%$search%' OR tags LIKE '%search%'";
$post = $db->select($query);
if ($post)
while ($result = $post->fetch_assoc())
echo"Database data like, $result['title']";
else
echo "result Not found";
在 search.php 中包含 database.php
class Database
public function select($query)
$result = $this->link->query($query) or die($this->link->error.__LINE__);
if($result->num_rows > 0)
return $result;
else
return false;
$db = new Database();
【讨论】:
【参考方案3】:$query = "(SELECT content, title, 'msg' as type FROM messages WHERE content LIKE '%" .
$keyword . "%' OR title LIKE '%" . $keyword ."%')
UNION
(SELECT content, title, 'topic' as type FROM topics WHERE content LIKE '%" .
$keyword . "%' OR title LIKE '%" . $keyword ."%')
UNION
(SELECT content, title, 'comment' as type FROM comments WHERE content LIKE '%" .
$keyword . "%' OR title LIKE '%" . $keyword ."%')";
mysql_query($query);
因此,您从所有三个表中获取结果,并且您可以通过查看其 type
值来确定哪一行来自哪个表。
【讨论】:
绝对是正确的答案。谢谢!类型方法正是我所需要的。 使用此查询完美,唯一的问题是为什么我不能添加另一个字段,如“SELECT 内容、标题、用户名”?当我这样做时,我得到一个服务器错误 500。你知道吗?提前致谢! @FrankW.:嗨,弗兰克,很抱歉我之前没有注意到您的评论。希望您解决了您的问题? 亲爱的先生,如果一个表与另一个表有不同的列名,如何实现?【参考方案4】:在您使用的其他表中进行两次搜索:
SELECT `categories`.`title`, `posts`.`title` WHERE `categories`.`title` LIKE $a OR `posts`.`title` LIKE $a
CATEGORIES 和 POSTS 是数据库的表。
【讨论】:
不是我想要的。不过还是谢谢你的回答! 它会返回重复值!以上是关于PHP mysql使用关键字搜索多个表的主要内容,如果未能解决你的问题,请参考以下文章