gpt4 book ai didi

php - "Fuzzy"帖子标签和帖子标题在 mysql 和 php 中搜索

转载 作者:行者123 更新时间:2023-11-29 19:05:51 25 4
gpt4 key购买 nike

我想创建一个搜索功能,根据帖子的标题和帖子的标签来搜索帖子。我想知道是否可以仅使用 mysql 查询来完成此操作,或者是否需要使用 2 个查询,然后使用 php 对结果进行排序。

我要查询的表具有以下结构: Table structure

我尝试过这样做,但它返回重复的帖子:

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 个查询来实现我想要的 php 代码

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

最佳答案

你可以尝试这个:

SELECT 
p.id,
p.title,
GROUP_CONCAT(t.tag_name) as `tags`,
FROM posts p
JOIN post_tags p1
ON pt.post_id = posts.id
JOIN tags t
ON pt.tag_id = tags.id
WHERE p.title LIKE '%something%' OR t.tag_name LIKE '%something%'
GROUP BY p.id
ORDER BY p.title

关于php - "Fuzzy"帖子标签和帖子标题在 mysql 和 php 中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43519153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com