我正在创建一个网站像堆栈溢出。
当我们在“堆栈溢出”上发布新问题时,我们会给出一些与我们的问题相关的标签。
我有一个字段名为 q_related_tag_ids
表中的(与问题相关的标记ID) question
.
我使用此字段存储所有 tag_ids
用逗号分隔( ,
)与发布的问题相关。
表格问题>>
q_id | q_title | q_ralated_tag_ids
1 | title1 | 4,5,8
2 | title2 | 6,8,1
3 | title3 | 2,81,13
4 | title4 | 8
3 | title3 | 2,87
4 | title4 | 83
表格答案>>
t_id | t_name | t_description
1 | java | java is ...
2 | php | php is ...
3 | ajax | ajax is ...
4 | c++ | c++ is ...
5 | perl | perl is ...
8 | java8 | java8 is...
...
现在的问题是>>我想获取/选择所有与 tag-id = 8
,或与 java8
标签
为此,我创建了一个查询>>
select * from question where (
q_related_tag_ids like '8'
or q_related_tag_ids like '%,8,%'
or q_related_tag_ids like '%,8')
有没有更好的方法?
5条答案
按热度按时间huwehgph1#
我将创建一个表,使两个表之间的关系。
表格问题>>
表格答案>>
表关系>>
关系表的主键是使用两个外键之间的连接创建的,并且是唯一的
SELECT * FROM question WHERE q_id IN (SELECT q_id FROM relation WHERE t_id = 8)
我建议你看看梅里斯法cgvd09ve2#
避免通俗主义者更好,但这里有一个方法可以让你做你想做的事:
xlpyo6sf3#
我想你应该用另一张table来存放问号。
table
contains id, question_id, tag_id
这将更加快速和易于维护请检查一下这个例子
我认为现在使用varchar或text来存储标记,在数据类型上搜索需要更多的时间。如果使用另一个表来存储问号标记,性能会好得多。这里您正在整数域中搜索
ekqde3dh4#
olmpazwi5#