我有一个项目的每个状态的搜索框!
当我搜索时,这是正确的方法吗?
SELECT *
FROM (`site_pages`)
WHERE `title` LIKE '%php%'
OR `content` LIKE '%php%'
HAVING `status` != 'deleted'
AND `status` != 'concept'
如果没有提交搜索,我只需使用
... WHERE'status' != 'deleted' AND 'status' != 'concept'
答案 0 :(得分:4)
一些改进的可能性:
没有理由使用having
,您只需添加其他where
条件。
您可以创建一个statuses
表,为已删除/概念值分配数字表示,使您可以轻松更改状态名称添加/枚举所有现有状态。这减少了存储许多冗余文本字段的开销,并大大提高了与状态字段进行比较的速度,数字比较比字符串比较快得多。
您还可能希望将“已删除”状态设置为每条记录上的一列。就目前而言,记录可以是概念或删除,但不是删除的概念。如果您想取消删除记录怎么办?你已经失去了删除前的状态。这就是通常如何完成记录的非破坏性删除;通过激活deleted
位或停用active
位。
否则它看起来很标准的SQL。
答案 1 :(得分:2)
HAVING
用于聚合查询(即使用GROUP BY
的查询)。您的最后两个条件应合并到WHERE
块中。另外,我认为你不需要围绕表名的括号。
你会发现随着你的数据的增长,使用LIKE
这样的表现可能效果不是很好,但是你使用它的方式没有任何合成错误。