web-dev-qa-db-fra.com

PHP mysql recherche plusieurs tables en utilisant un mot clé

J'ai trois tables dans ma base de données qui sont:

messages
topics
comments

Chacune de ces tables comporte deux champs appelés "contenu" et "titre". Je souhaite pouvoir utiliser "Like" dans mon instruction SQL pour consulter "messages.content", "messages.title", "topics.content", "topics.title", "comments.content" et "commentaires. titre 'en utilisant un mot clé.

Jusqu'à présent, ma requête est capable de trouver les résultats d'une seule table:

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

Je me demande aussi, une fois les résultats de plusieurs tableaux obtenus, comment puis-je savoir quel résultat provient de quel tableau? 

Toute aide serait grandement appréciée!

28
$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);

Vous obtenez donc le résultat des trois tables et vous pouvez identifier la ligne à partir de quelle table en consultant sa valeur type.

83
MD Sayem Ahmed

Ce que vous recherchez probablement est la commande 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%'
7
evan

Deux recherches dans les autres tables que vous utilisez:

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

LesCATÉGORIESetPOSTSsont des tableaux de votre base de données.

2
Bruno Alano

Formulaire de recherche 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";
    }

inclure database.php dans 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();
1
Mahmudul Hasan