有沒有辦法將MySQL的HAVING子句與Fat Free Framework's SQL Mapper object's方法中的任何一個一起使用?假設我有以下數據表:缺少在F3中使用SQL的HAVING子句的選項
+----+-------+--------+
| id | score | weight |
+----+-------+--------+
| 2 | 1 | 1 |
| 2 | 2 | 3 |
| 2 | 3 | 1 |
| 2 | 2 | 2 |
| 3 | 1 | 4 |
| 3 | 3 | 1 |
| 3 | 4 | 3 |
+----+-------+--------+
現在我想運行下面的查詢:
SELECT id, SUM(score*weight)/SUM(weight) AS weighted_score GROUP BY id HAVING weighted_score>2
真相被告知我真的想指望這些記錄的數目,但count
方法不支持$options
。
我可以在沒有HAVING
子句的情況下運行查詢,然後遍歷它們以檢查weighted_score
的值,但隨着越來越多的記錄將使其消耗越來越多的資源。有沒有內置的解決方案來解決這個問題?
編輯1: 我知道該怎麼做,如果有(基於manual)爲HAVING
條款不支持的方式:
$databaseObject = new DB\SQL(...);
$dataMapper = new \DB\SQL\Mapper($databaseObject, "tableName");
$dataMapper->weightedScore = "SUM(weight*score)/SUM(weight)";
$usersInfo = $dataMapper->find([],["group"=>"id"]);
$place = 1;
foreach ($usersInfo as $userInfo) {
if ($usersScores->weightedScore > 2) $place++;
}
如果我能夠使用HAVING
條款則foreach循環將不需要通過查詢加載項的數目會減少:
$databaseObject = new DB\SQL(...);
$dataMapper = new \DB\SQL\Mapper($databaseObject, "tableName");
$dataMapper->weightedScore = "SUM(weight*score)/SUM(weight)";
$usersInfo = $dataMapper->find([],["group"=>"id", "having"=>"weighted_score<2"]); // rough idea
$place = count($usersInfo);
如果count
method支持$options
它會更簡單,它WOU ld保存應用程序使用的內存,因爲不會加載任何記錄:
$databaseObject = new DB\SQL(...);
$dataMapper = new \DB\SQL\Mapper($databaseObject, "tableName");
$dataMapper->weightedScore = "SUM(weight*score)/SUM(weight)";
$place = $dataMapper->count([],["group"=>"id", "having"=>"weighted_score<2"]); // rough idea
是的,但這仍然是普通的香草SQL。我想知道的是,如果可以使用Fat Free Framework的SQL映射器來完成。它擴展了PHP PDO,所以也許有辦法在PDO層面上做到這一點......我將用一個我希望能夠完成的例子以及我如何做到這一點的示例來更新我的問題,直到我將在這裏得到一個提示。 – george007