PHPウェブサイトをYii2フレームワークに移行する際に、以下のクエリを作成しました。勝者のトップ10を表示するためにコントローラーに追加したいと思います。 Yii2データベースクラスですが、動作させることができません。
私のテーブルは次のとおりです。
ユーザー:
_id | user_name | user_status | ...other columns...
_
ベット:
_id | user_id | date_time |...other columns...| balance_return
_
Yii2で取得したいクエリは次のとおりです。
_$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
");
_
変数start_dateはtime()
に従って計算する6か月の期間です。また、_balance_return
_はユーザーが獲得したすべての勝利であるため、その合計がランキングを決定することに注意してください。
2番目のクエリは次のとおりです。
_$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
");
_
このように生のSQLを実行できます
$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();
読むことをお勧めします: http://www.yiiframework.com/doc-2.0/yii-db-connection.html#createCommand()-detail
最初のパラメーターはsql(プレースホルダーを含む)で、2番目の部分はプレースホルダーで使用される値の配列です。