我有一个这样的帖子表:
----- POSTS -----
- id
- ..等..
- 类别1
- 类别2
- category3
可以过滤任何这些类别,我计划构建如下的SQL语句:
SELECT *
FROM posts
WHERE category1='..sth..'
AND category1='..sth..'
OR category1='..sth..'
OR category2='..sth..'
OR category3='..sth..'
AND category3='..sth..'
OR ..."
这是一种不好的做法吗?这会有性能问题吗?
编辑:我给出的查询的AND和OR语句仅作为示例。
答案 0 :(得分:2)
试试这个
SELECT * FROM posts
WHERE category1 in ('sth','sth')
OR category2 in ('sth','sth')
OR category3 in ('sth','sth')
.....
答案 1 :(得分:1)
如果你的数据库设计得很好,那么这是不错的做法,实际上是选择数据的理想方式。 最好的办法是考虑如何使用数据并设计存储空间,以便轻松访问最常用的数据。 这里有很多关于数据库设计细节的帖子。
你建议的sql是荒谬的(使用括号),但我怀疑你只是想把它作为一个例子。
答案 2 :(得分:1)
一般来说,这不是不坏的做法。但是,在POSTS表中有一个类别列表,表明您可能需要规范化或重构数据库结构。我想您在问题中显示的3个类别可能具有特定的特殊含义,但您希望用更好的列名表示。
您可以使用以下结构,这样您就可以根据需要将帖子分类为多个类别。
<强>帖子强>:
<强>分类强>:
<强> POST_CATEGORIES 强>:
此结构还可将您的查询简化为:
SELECT *
FROM POSTS
JOIN POST_CATEGORIES
ON POSTS.id = POST_CATEGORIES.post_id
WHERE POST_CATEGORIES.category_id = "...sth...";