J'ai écrit les requêtes ci-dessous lors de la migration de mon site Web PHP vers le framework Yii2. Je souhaite les ajouter à mon contrôleur afin d'afficher les 10 meilleurs paris gagnés. J'ai essayé de passer par de nombreux Yii2 classes de base de données, mais je ne peux pas le faire fonctionner.
Mes tables sont:
tilisateurs:
id | user_name | user_status | ...other columns...
paris:
id | user_id | date_time |...other columns...| balance_return
Les requêtes que je veux obtenir dans Yii2 sont:
$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 est une période de 6 mois que je calcule en fonction de time()
Veuillez également noter que balance_return
Est chaque victoire qu'un utilisateur a obtenue de sorte que sa somme détermine le classement.
La deuxième requête est:
$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
");
Vous pouvez exécuter sql brut comme ceci
$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();
Je recommande de lire: http://www.yiiframework.com/doc-2.0/yii-db-connection.html#createCommand () -detail
Le premier paramètre est le sql (avec un ou plusieurs espaces réservés) et la seconde partie est un tableau de valeurs à utiliser avec les espaces réservés.