Поле строки СУММА MEDOO

Я пытаюсь получить суммированное поле в medoo.

Мой sql на данный момент выглядит так:

$database->debug()->select("user_rupees_in_house", [
    "[<]rupees" => ["rupee_id" => "ID"]
], [
    "name",
    "amount",
    "amount_spend"
], [
    "user_uuid"  => $user,
    "GROUP" => "rupee_id"
]);

Отладка регистрирует следующий оператор:

SELECT `name`,`amount`,`amount_spend`, `rupee_id`
FROM `user_rupees_in_house` 
RIGHT JOIN `rupees` 
ON `user_rupees_in_house`.`rupee_id` = `rupees`.`ID` 
WHERE `user_uuid` = '4da9ff11-56ca3a2f-b3ab-a25b9230'
GROUP BY `rupee_id`

Чего я пытаюсь достичь, так это:

SELECT `name`,SUM(`amount`),SUM(`amount_spend`), `rupee_id`
FROM `user_rupees_in_house` 
RIGHT JOIN `rupees` 
ON `user_rupees_in_house`.`rupee_id` = `rupees`.`ID` 
WHERE `user_uuid` = '4da9ff11-56ca3a2f-b3ab-a25b9230'
GROUP BY `rupee_id`

Кто-нибудь знает, как сделать это заявление в medoo?

[РЕДАКТИРОВАТЬ 1]

Нашел другой способ добиться этого

// Get the rupee types
$rupee_types = $database->select("rupees", "ID");

foreach ($rupee_types as $rupee_type) {
    $amount = $database->sum("user_rupees_in_house", "amount", [
        "AND" => [
            "rupee_id" => $rupee_type,
            "user_uuid" => $user
        ]
    ]);

    // Build array of rupees
}

Это сделает гораздо больше обращений к базе данных, но работает нормально, пока оператор SELECT не поддерживает агрегатные функции.


person Xiduzo    schedule 27.02.2016    source источник


Ответы (1)


Medoo не поддерживает агрегатную функцию в операторе SELECT. Вместо этого используйте запрос raw.

Попробуй это:

$result = $database->query(
    "SELECT `name`,SUM(`amount`),SUM(`amount_spend`), `rupee_id`
    FROM `user_rupees_in_house` 
    RIGHT JOIN `rupees` 
    ON `user_rupees_in_house`.`rupee_id` = `rupees`.`ID` 
    WHERE `user_uuid` = '$user'
    GROUP BY `rupee_id`"
)->fetchAll();

Справочник

person Samir    schedule 27.02.2016
comment
Это приведет к: ВЫБЕРИТЕ имя, КАК сумма, КАК сумма_расходов ОТ user_rupees_in_house ПРАВИЛЬНО СОЕДИНИТЕ рупии ON user_rupees_in_house.rupee_id = rupees.ID ГДЕ user_uuid = '4da9ff11-56ca3a2f-b3ab-a25b9230' СГРУППИРОВАТЬ ПО rupee_id - person Xiduzo; 27.02.2016
comment
Извиняюсь. Это моя ошибка. Medoo не поддерживает агрегатную функцию в операторе select. Вместо этого вы можете использовать необработанный запрос. исправит мой пост. - person Samir; 27.02.2016
comment
это работает, нужно только добавить '->fetchAll()' после оператора. Но должен быть лучший способ использования класса medoo (?) - person Xiduzo; 27.02.2016
comment
Текущая версия не поддерживает агрегатные функции в операторе SELECT. Но вы можете использовать метод sum, как показано в справочной ссылке в моем посте. - person Samir; 27.02.2016
comment
Prever, чтобы сделать только один статус, но спасибо за вашу помощь: D - person Xiduzo; 27.02.2016