php - guide - yii2 sql server
¿Realizar consultas SQL sin formato en Yii2? (1)
He escrito las siguientes consultas cuando migro mi sitio web PHP al marco Yii2. Quiero agregarlos a mi controlador para mostrar las 10 mejores apuestas ganadas. He intentado pasar por muchas clases de base de datos Yii2 pero no puedo hacerlo funcionar.
Mis tablas son:
usuarios:
id | user_name | user_status | ...other columns...
apuestas:
id | user_id | date_time |...other columns...| balance_return
Las consultas que quiero obtener en Yii2 son:
$query_all = $dbh->query("
SELECT SUM(bets.balance_return) AS total_win
, bets.user_id
, users.user_name
, users.user_status
FROM bets INNER JOIN users ON bets.user_id = users.id
WHERE users.user_status = ''verified''
AND bets.date_time > " . $start_date . "
GROUP BY bets.user_id
ORDER BY total_win DESC
");
La variable start_date es un período de 6 meses que calculo según el time()
También tenga en cuenta que balance_return
es cada ganancia que obtiene un usuario, por lo que su suma determina la clasificación.
La segunda consulta es:
$qwi = $dbh->query("
SELECT SUM(bets.balance_return) AS total_win
, bets.user_id
, users.user_name
, users.user_status
FROM bets INNER JOIN users ON bets.user_id = users.id
WHERE users.user_status = ''verified''
AND bets.date_time > " . $start_date . "
GROUP BY bets.user_id
ORDER BY total_win DESC LIMIT 0,10
");
Puede ejecutar sql en bruto como este
$connection = Yii::$app->getDb();
$command = $connection->createCommand("
SELECT SUM(bets.balance_return) AS total_win
, bets.user_id
, users.user_name
, users.user_status
FROM bets INNER JOIN users ON bets.user_id = users.id
WHERE users.user_status = ''verified''
AND bets.date_time > :start_date
GROUP BY bets.user_id
ORDER BY total_win DESC", ['':start_date'' => ''1970-01-01'']);
$result = $command->queryAll();
Recomiendo leer: http://www.yiiframework.com/doc-2.0/yii-db-connection.html#createCommand()-detail
El primer parámetro es el sql (con marcador (s) de posición) y la segunda parte es una matriz de valores para usar con los marcadores de posición.