我的应用程序使用了一些非常大且复杂的 SQL 查询。我不想在使用它们的类中使用它们,因为它们会使事情变得混乱。所以我尝试了一些新的东西:将它们存储在一个Queries
类中,并将我的应用程序使用的各种查询设置为该类中的const
变量。然后,在我的其他课程中,我将查询称为Db::query(Queries::queryID, array($parameter))
. 这会将杂乱的查询存储在其他地方,并使工作类保持整洁。这也有助于减少重复,因为多个类使用了一些查询。
例子:
abstract class Queries {
const queryID = <<<'SQL'
SELECT t.typeID, t.typeName, ROUND(greatest(0,sum(t.quantity)) * (1 + (b.wasteFactor / 100))) * ? AS quantity
FROM
(SELECT invTypes.typeid typeID, invTypes.typeName typeName, quantity
FROM invTypes, invTypeMaterials, invBlueprintTypes
WHERE invTypeMaterials.materialTypeID = invTypes.typeID AND
invBlueprintTypes.productTypeID = invTypeMaterials.typeID AND
invTypeMaterials.TypeID = ?
UNION
SELECT invTypes.typeid typeid, invTypes.typeName name, invTypeMaterials.quantity * r.quantity * - 1 quantity
FROM invTypes, invTypeMaterials, ramTypeRequirements r, invBlueprintTypes bt
WHERE invTypeMaterials.materialTypeID=invTypes.typeID AND
invTypeMaterials.TypeID =r.requiredTypeID AND
r.typeID = bt.blueprintTypeID AND
r.activityID = 1 AND
bt.productTypeID = ? AND
r.recycle = 1
) t
INNER JOIN invBlueprintTypes b ON (b.productTypeID = ?)
GROUP BY t.typeid, t.typeName
SQL;
...
}
这在大多数情况下运行良好,但我想知道其他人对像这样将查询与工作类分开的意见。有没有更好的方法?我在微观管理这个吗?