gpt4 book ai didi

php - 改进 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 05:17:16 25 4
gpt4 key购买 nike

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

所以问题是,在某个时候我想向网站添加一个附加功能,这对我的查询影响最大,我需要更改其中的大部分才能使该功能正常工作。所以让我举个例子:假设我有一个用户表,我没有添加一列来检查用户是否被禁止。现在我添加了“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com