php - 改进 SQL 查询

标签 php mysql sql-server

我最近设计了一个使用大量查询的网站。在开发我的网站期间,我遇到了一个非常耗时且令人沮丧的问题。

所以问题是,在某个时候我想向网站添加一个附加功能,这对我的查询影响最大,我需要更改其中的大部分才能使该功能正常工作。所以让我举个例子:假设我有一个用户表,我没有添加一列来检查用户是否被禁止。现在我添加了“banned”列,现在的问题是,我需要安排所有其他查询来首先检查用户是否被禁止。我希望这是有道理的。

所以我的问题是,有没有一种方法可以最大限度地减少这项工作,而不是遍历所有查询并修改它们(添加 is user banned),而是添加一次该功能,查询就可以工作了?基本上我该如何改进?

我希望这是有道理的,如果没有,我会尽力进一步解释。

如果能帮助我提高编码知识,我们将不胜感激。

附言。 我正在使用 SQL 和 PHP。如果有比 SQL 更好的东西可以解决这个问题,请提出建议。

谢谢

最佳答案

我明白你的问题。你有一些列规则。在所有应用程序中全局使用。例如,在我的例子中有“状态”列,并且有一些逻辑含义称为“重要”,如果列具有集合中的特定值之一,它就起作用。

所以,在任何地方,要检查状态是否“重要”,我需要写:

WHERE `status` IN('INCIDENT', 'ERROR')

如果我需要将“FLAGGED”添加到重要状态列表中,我需要重写所有 SQL 查询:

WHERE `status` IN('INCIDENT', 'ERROR', 'FLAGGED')

一旦我厌倦了这个。我决定编写一个 MySQL 函数来完成这项工作。称之为 IS_STATUS_IMPORTANT(状态)。 但是这个解决方案没有通过测试,因为它降低了性能——它不允许 MySQL 正确使用索引。

我最终通过创建一些应用程序全局条件解决了这个问题,比方说:

class DbHelper {
    public static function importanceCondition($column_name) {
        return $column_name . " IN('INCIDENT', 'ERROR') ";
    }
}

现在我在整个应用程序中编写:

$sql = 'SELECT * FROM blah .... WHERE ...  AND ' .  DbHelper::importanceCondition('x.status');

如果我需要更改一些逻辑条件,我会在一个地方进行,并且它适用于整个应用程序。

在你的情况下你可以添加一些功能

class DbHelper {
    ...
    public static function validUserCondition($user_alias) {
        return " ({$user_alias}.deleted = 0 AND {$user_alias}.banned = 0) ";
    }
}

关于php - 改进 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000881/

相关文章:

php - 在PHP中的另一个类中扩展一个类

php - 从表单更新 sql 表中的数据 - 数据必须是唯一的

php - 查询始终返回特定行

php - 无法确定 INSERT PDO 错误。 SQLSTATE[42000] : Syntax error or access violation

java - java中sql字符串单引号的无效字符

sql - 主键 (a,b) 与主键 (b,a) 不同吗?

mysql - Blob数据库,极其动态的数据库

php - 如果比较在 php 中不起作用

c# - 当 ID 自动递增时,如何在 Visual Studio 中将其他值插入数据库

javascript - 如何使用 JavaScript 触发器管理 PHP 列表