如题,因项目较小,Tags是作为一个字段存储在文章表的,多个关键词以逗号分隔,并未分表存储。
SqlAlchemy+SQLite+Flask
不知道你说的相关文章是不是指命中其中任意一个关键字就叫相关
1.先取出当前文章的 tags
select tags from article where id=x
2.再对 tags 按逗号分割取出当前包含的各个 tags
3.最后按各个 tag 取文章
select * from article where tags like '%SqlAlchemy%' or tags like '%SQLite%' or tags like '%Flask%'
提供一个思路。
建两张表:
tags, posts
post:
id: id,
name: name,
....
tag:
id: id,
name: name,
post_id: 外键,post.id
...
B,再从 tags 中查出所有 post_id不等于5 且 tags.name等于或类似A.name 的 tags.post_id;
SELECT B.post_id FROM tags
WHERE B.name IN
(SELECT A.name, A.post_id FROM tags WHERE A.post_id=5) A
AND B.post_id<>5
这条语句是用的 in 的查法,不过……我也不保证正确。希望可以帮到楼主。
----- 更新 ——————
才看到楼主说的本来是 tags 以逗号分隔的……sorry。
1 回答2.5k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答3.7k 阅读
1 回答1.7k 阅读
572 阅读
1 回答399 阅读
450 阅读
我也想问这样的问题啊,一个字段存一个tag可以做,但是一个字段存多个tag不知道了。顶一个。
回头一看和我想的不一样,我想问的是怎么实现tag标签的排序,标签按点击的权重进去排序,点击数量最多排在前边。
你这个问题我应该可以回答。首先对tag字段建全文索引。然后把mysql的配置改一下 ft_min_word_len 默认是4 中文是一个字符2字节,改个成1吧。这里不需要什么分词软件,因为你的tag是有分词标记过了的,所以,把tag标签里边的逗号换成空格,mysql全文查找语句SELECT * FROM tableName WHERE MATCH (tags) AGAINST ('螃蟹在晨跑' IN BOOLEAN MODE);
mysql低版本可能不支持,我之前用的msyql5.1是查不到中文的,后来换成5.5就好了,其他版本没测试过。