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!
$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
.
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%'
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.
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();