2011-07-04 10 views
28

का उपयोग कर टेबल मैं अपने डेटाबेस में तीन टेबल जो कर रहे हैं की है। मैं 'message.content', 'message.title', 'subject.content', 'themes.title', 'comments.content' और 'टिप्पणियों' को देखने के लिए अपने SQL स्टेटमेंट में 'Like' का उपयोग करने में सक्षम होना चाहता हूं। शीर्षक 'एक कीवर्ड का उपयोग कर।PHP MySQL खोज एक से अधिक एक कीवर्ड

अब तक, मेरी क्वेरी केवल एक मेज से परिणाम खोजने में सफल है:

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

मैं भी सोच रहा हूँ एक बार मैं कई टेबल से परिणाम प्राप्त, मैं कैसे बता सकते हैं क्या परिणाम क्या मेज से है ?

किसी भी मदद की सराहना की जाएगी!

अन्य तालिकाओं में
+1

क्या कोई कारण है कि आप केवल 3 अलग-अलग प्रश्न नहीं कर रहे हैं? कॉलम शायद उन सभी में समान नहीं हैं। – evan

+0

पूर्ण पाठ खोज (एफटीएस) अनुशंसित दृष्टिकोण है - [MySQL में मूल वाक्यविन्यास है, लेकिन यह केवल MyISAM के लिए है] (http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)। अन्यथा, आपको स्फिंक्स जैसे तीसरे पक्ष के समर्थन को देखना होगा। –

उत्तर

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 मूल्य को देखकर आया था।

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%' 
+0

निश्चित रूप से सही उत्तर। धन्यवाद! टाइप दृष्टिकोण बिल्कुल वही था जो मुझे चाहिए था। –

+0

इस क्वेरी का उपयोग सही काम करता है, केवल एक चीज है कि मैं "SELECT सामग्री, शीर्षक, उपयोगकर्ता नाम" जैसे किसी अन्य फ़ील्ड को क्यों नहीं जोड़ सकता? जब मैं ऐसा करता हूं तो मुझे सर्वर त्रुटि 500 ​​मिलती है। आपको कोई विचार है? अग्रिम में धन्यवाद! –

+0

@ फ्रैंकडब्ल्यू .: हाय फ्रैंक, क्षमा करें कि मैंने आपकी टिप्पणी पहले नहीं देखी थी। मुझे आशा है कि आप अपनी समस्या हल करेंगे? –

2

दो खोज आप का उपयोग करें:

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

श्रेणियों और पोस्ट अपने डेटाबेस की टेबल है।

+1

काफी कुछ नहीं जो मैं खोज रहा था। हालांकि उत्तर के लिए धन्यवाद! –

+0

यह डुप्लिकेट मान वापस कर देगा! –

6

क्या आप शायद के लिए देख रहे यूनिअन आदेश है। search.php

में 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(); 
-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

$ यह-> लिंक एप्लिकेशन डेटाबेस कनेक्शन –

+0

है क्या आप अपना उत्तर विस्तृत करेंगे? – Hatef

1

एचटीएमएल खोज प्रपत्र:

<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"; 
    } 

डेटाबेस शामिल

संबंधित मुद्दे