在将PHP网站迁移到Yii2框架时,我编写了以下查询.我想将它们添加到我的控制器中,以便显示赢得的前10个赌注.我try 了很多Yii2数据库类,但我无法让它工作.

我的桌子是:

users:

id | user_name | user_status | ...other columns...

bets:

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是一个6个月的周期,我根据time()计算.请注意,balance_return是用户获得的每一次胜利,因此其总和决定排名.

第二个问题是:

$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(带占位符),第二部分是要与占位符一起使用的值array.

Mysql相关问答推荐

如何使RST(*)在巨大的数据集上快速执行?

将值代入子查询

最终的自联表是如何记住关联的呢?

计算同一个表中的两列,然后将两者都算作总数

Mysql根据文本语言或行数将列拆分为多列

如何根据 R 中的价格范围将数据从一列复制到新列?

为什么以及如何将 Django filter-by BooleanField 查询转换为 SQL WHERE 或 WHERE NOT 而不是 1/0?

mysql 执行注释部分

SQL从具有相同列的行中 Select 最后一行

SUBSTRING_INDEX 获取第 n 个值

如果在表中多次发现 a 列中的相同值,则排除所有行

在 MySQL 中使用三个表进行计算

mysql - 如何加入表中的动态列

从终端访问 MAMP 的 MySQL

基于字符串动态创建 PHP 对象

在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()

为什么 MySQL 自动增量会在插入失败时增加?

当运行 UPDATE ... datetime = NOW();所有更新的行都会有相同的日期/时间吗?

MySQL在哪里存储数据库文件?

匹配 IN 子句中的所有值