我想創建一個搜索功能,根據他們的標題和帖子標籤來搜索帖子。我想知道是否有可能做到這一點只是一個MySQL查詢,或者如果我需要使用2個查詢,然後使用PHP排序結果。「模糊」帖子標籤和帖子標題搜索mysql和php
我試着做這樣的事情,但它返回重複的帖子:
SELECT post_tags.id, post_tags.tag_id, posts.id, tags.tag_name,
posts.title
FROM post_tags
JOIN tags ON (tags.tag_name LIKE '%something%' AND post_tags.tag_id = tags.id)
JOIN posts ON (posts.title LIKE '%something%' OR post_tags.post_id = posts.id);
我還聽說某處在mysql中使用LIKE
非常慢,因爲沒有索引。
因此,我的問題是,如果有這種情況,最佳做法是什麼?
- 編輯 -
我添加它使用2個查詢來達到我想要
function search($query, $con = null){
$conn = (isset($con) ? $con : get_conn());
$logged_in_user_id = current_user.id;
$posts = Array();
$param = "%$query%";
if($stmt = $conn->prepare("SELECT posts.id, posts.title ...
FROM post_tags
JOIN tags ON post_tags.tag_id = tags.id
JOIN posts ON (post_tags.post_id = posts.id OR posts.title LIKE ?)
WHERE posts.title LIKE ? OR tags.tag_name LIKE ?;")){
$stmt->bind_param('sss', $param,$param, $param);
$stmt->execute();
$stmt->bind_result($id, $title ...);
while($stmt->fetch()){
if(!array_key_exists($id, $posts)){
$posts[$id] = new Post($id, $title ...);
}
}
}
return $posts;
}
返回所有標籤的帖子。我只需要在標題或標籤上匹配的帖子。 – Marius
@Marius我編輯了答案嘗試 –