2015-05-06 30 views
25

PHP web sitemi Yii2 çerçevesine taşıdığım için aşağıdaki sorguları yazdım. En iyi 10 bahis kazanmayı göstermek için onları denetleyicime eklemek istiyorum. Birçok Yii2 veritabanı sınıfından geçmeyi denedim ama işe yaramayacağım.Yii2'de ham SQL sorguları gerçekleştiriliyor mu?

Benim tablolar şunlardır:

kullanıcıları: Ben Yii2 almak isteyen sorguları

id | user_id | date_time |...other columns...| balance_return 

:

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

bahisler

$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 
"); 

Değişken başlangıç_tarihi, time()'a göre hesapladığım 6 aylık bir dönemdir. Ayrıca, bir kullanıcının aldığı her kazananın sıralamasını belirlediğini lütfen unutmayın.

ikinci sorgu geçerli:

$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 
"); 

cevap

51

Bu

$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(); 

gibi ham sql yürütebileceği Okuyor tavsiye: http://www.yiiframework.com/doc-2.0/yii-db-connection.html#createCommand()-detail

İlk parametre yer tutucu ile sql ((olan lar)) ve ikinci kısım, yer tutucularla birlikte kullanılacak bir değer dizisidir.

+0

Soruyu cevapladığınız için çok teşekkür ederiz. İki gün boyunca sıkıştıktan sonra işe almak başardı. Ayrıca bir modül denetleyicisinden '$ connection = Yii :: $ app-> getDb();' dediğimde bir hata aldığımı, '$ connection = \ Yii :: $ app->' ı çağırmam gerektiğini de not etmek istedim. getDb(); 'Neden bu olsun? –

+2

Hata, ad alanı nedeniyle oldu. "Yii" yi eğik çizgi olmadan kullanmak isterseniz, sınıfınızın en üstünde 'Yii kullan' seçeneğini eklemeniz gerekir. – jagsler

+0

En iyi uygulama olarak, Yii nesnesini satır içi kullandığım her yerde '' 'Yii :: $ app ...' '' yapma alışkanlığı haline getiriyorum. –

İlgili konular