这是进行mysql查询的正确方法吗?

时间:2011-09-08 04:01:13

标签: php mysql codeigniter

我有一个项目的每个状态的搜索框!

当我搜索时,这是正确的方法吗?

SELECT *
FROM (`site_pages`)
WHERE  `title`  LIKE '%php%'
OR  `content`  LIKE '%php%'
HAVING `status` != 'deleted'
AND `status` != 'concept'

如果没有提交搜索,我只需使用

... WHERE'status' != 'deleted' AND 'status' != 'concept'

2 个答案:

答案 0 :(得分:4)

一些改进的可能性:

  • 没有理由使用having,您只需添加其他where条件。

  • 您可以创建一个statuses表,为已删除/概念值分配数字表示,使您可以轻松更改状态名称添加/枚举所有现有状态。这减少了存储许多冗余文本字段的开销,并大大提高了与状态字段进行比较的速度,数字比较比字符串比较快得多。

  • 您还可能希望将“已删除”状态设置为每条记录上的一列。就目前而言,记录可以是概念或删除,但不是删除的概念。如果您想取消删除记录怎么办?你已经失去了删除前的状态。这就是通常如何完成记录的非破坏性删除;通过激活deleted位或停用active位。

否则它看起来很标准的SQL。

答案 1 :(得分:2)

HAVING用于聚合查询(即使用GROUP BY的查询)。您的最后两个条件应合并到WHERE块中。另外,我认为你不需要围绕表名的括号。

你会发现随着你的数据的增长,使用LIKE这样的表现可能效果不是很好,但是你使用它的方式没有任何合成错误。