2011-07-04 169 views
28

多个表我有我的数据库三个表分别是:PHP MySQL的搜索使用关键字

messages 
topics 
comments 

各表有两个字段叫做“内容”和“称号”。我希望能够在我的sql语句中使用'Like'来查看'messages.content','messages.title','topics.content','topics.title','comments.content'和'comments。标题'使用关键字。

到目前为止,我的查询能够找到只有一个表的结果:

mysql_query("SELECT * FROM messages 
WHERE content LIKE '%" . $keyword . "%' 
OR title LIKE '%" . $keyword ."%'"); 

,我也想知道,一旦我得到来自多个表的结果,我怎么能知道是什么表什么结果?

任何帮助将不胜感激!

其他表
+1

是不是有一个原因,你不只是做3个不同的查询?这些列在所有这些列中可能都不相同。 – evan

+0

全文搜索(FTS)是推荐的方法 - [MySQL具有本地语法,但仅适用于MyISAM](http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)。否则,你必须寻找第三方支持,比如Sphinx。 –

回答

73
$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值从表中来了。

+0

绝对是正确的答案。谢谢!类型方法正是我所需要的。 –

+0

使用此查询工作完美,唯一的原因是为什么我不能添加像“选择内容,标题,用户名”的另一个字段?当我这样做,我得到一个服务器错误500.你有什么想法?提前致谢! –

+0

@FrankW .:嗨,弗兰克,很抱歉,我之前没有注意到您的评论。我希望你解决了你的问题? –

2

两个搜索你使用:

SELECT `categories`.`title`, `posts`.`title` WHERE `categories`.`title` LIKE {$a} OR `posts`.`title` LIKE {$a} 

类别帖子是你的数据库的表中。

+1

不是我正在寻找的东西。尽管谢谢你的回答! –

+0

它会返回重复值! –

6

什么你可能寻找的是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%' 
-1
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(); 
    $query = "SELECT * FROM post WHERE title LIKE '%$search%' OR body LIKE '%$search%'"; 
    $post = $db->select($query); 
    if ($post) { 
    while ($result = $post->fetch_assoc()) { 
echo"Database Table colum" 
} else{ 
echo "Search result not Match"; 
} 
} 
+0

$ this-> link是应用程序数据库连接 –

+0

您会详细说明您的答案吗? – Hatef

1

的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> 

的search.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"; 
    } 

包括数据库。 php在search.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();