2013-02-05 58 views
0

我正在開發一些代碼,需要執行這個查詢如何將「BETWEEN」函數從Mysql轉換爲Doctrine?

(繁體MYSQL)

SELECT * FROM `SistemaPuntuacions` WHERE `rankingActual` BETWEEN (SELECT `rankingActual` FROM `SistemaPuntuacions` WHERE `user_id` = $id) -5 AND (SELECT `rankingActual` FROM `SistemaPuntuacions` WHERE `user_id` = $id) +5 ORDER BY `rankingActual`" 

基本上我在SistemaPuntuacions已經用戶的列表,用他們的排名(rankingActual)。我需要顯示5位以上的用戶以及5位以上的用戶。

但是在教義語言中沒有「BETWEEN」,所以我被困在那裏。

我可以得到一些幫助嗎?

謝謝。

回答

1

嗯,其實有is在DQL之間。此代碼片段來自官方文檔。

<?php 
$query = $em->createQuery('SELECT u.name FROM CmsUser u WHERE u.id BETWEEN ?1 AND ?2'); 
$query->setParameter(1, 123); 
$query->setParameter(2, 321); 
$usernames = $query->getResult(); 
+0

該死的,我信任來自StackOverflow的一個答案,來自谷歌的搜索,表示在DQL中沒有任何BETWEEN,並且它來自MYSQL。非常感謝! – Reinherd

0

您可以使用本機SQL就像這樣:

$sql = 'SELECT * FROM `SistemaPuntuacions` WHERE `rankingActual` BETWEEN (SELECT `rankingActual` FROM `SistemaPuntuacions` WHERE `user_id` = $id) -5 AND (SELECT `rankingActual` FROM `SistemaPuntuacions` WHERE `user_id` = $id) +5 ORDER BY `rankingActual`'; 
$rows = $this->container->get('database_connection')->query($sql); 
+0

但是這是返回數據作爲對象的數組,作爲教義呢? – Reinherd