我有一个自定义的工作博客一切正常,我只是想知道是否有人知道更好的方法来从mysql数据库中选择包含标记的文章。
目前,这些标记存储在“blog_tags”下的“blog”表中,并使用类似于“%tag%”的语句重新获取文章。我这工作很好,直到我有两个标签包含相同的词,如网站和网站设计。
使用上述方法,通过搜索像网站这样的标签,我会得到包含网站标签和网站设计的结果。
为了解决这个问题,我在每个标记的开头和结尾添加了“*”,所以blog_标记现在看起来像*tag 1*、*tag 2*、*tag 3*、*等等。。。
现在我只搜索带有博客标记的文章,比如“%*tag here*%”。这很有效,但可能有更好的方法。有什么想法吗?
当前使用的查询是:

"SELECT * FROM `blog` WHERE `active` = 'y' AND `blog_tags` LIKE '%*" . str_replace("-", " ", $tag) . "*%' ORDER BY `blog_created` DESC LIMIT " . $startfrom . "," . $limit

提前谢谢!

最佳答案

数据库中不应包含多值字段。以您的示例为例,似乎您的博客具有许多标记,并且标记对应于许多博客。这是一种多对多的关系。
根据经验,多对多关系生成一个新表。因此,您应该使用的数据库模式如下:

Blogs(*Id*, activ, date_created)
Tags(*Id*, text)
Blog_Tag(*BlogId*, *TagId*)

Primary keys are displayed between asterisks.

So, if you want to search all blogs tagged with 'mysql' you would do something like:

select * from blogs b
join blog_tag bt on b.id = bt.blogid
join tags t on bt.tagid = t.id
where t.text = 'mysql'

当然,如果预先知道标记id,就不需要标记上的join。
希望这消除了一些疑虑。

关于php - 通过标签选择博客文章,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9806227/

10-12 07:40
查看更多