2013-05-03 2 views
1

Я пытаюсь подсчитать количество строк в реляционной таблице many to many, но всегда возвращает неправильное значение. Когда он равен 1, всегда возвращается 2.Количество строк реляционной таблицы

PS: Все модели и внешние ключи в mysql настроены правильно.

Комментарии Таблица:

id | name 
10  Comment Test 

Пользователи Таблица:

id | name 
20  User Test 

Симпатии (Комментарий/Пользователь) Многие ко многим:

user_id | comment_id 
20   10 

Код:

$criteria = new CDbCriteria; 
$criteria->select='*, COUNT(likes.id) AS count_likes'; // I believe the error is in the use of COUNT (likes.id). 
$criteria->with=array('likes'=>array('on'=>'user_id=20')); 
$model = Comments::model()->findByPk($_GET['id'], $criteria); 

// Return Wrong Value 
echo $model->count_likes; // Return 2 where should be 1. (I need to use this case) 
echo count($model->likes); // Return right value 1. 
+0

Вы можете напечатать полный запрос и разместить его здесь? –

ответ

2

Вы должны использовать Statistical Query, например, :

В вашей Комментарии модели:

public function relations() 
{ 
    return array(
     // ... 

     // I assume your relation table's name is "likes" 
     'likes'=>array(self::MANY_MANY, 'Users', 'likes(comment_id, user_id)'), 
     'likesCount'=>array(self::STAT, 'Users', 'likes(comment_id, user_id)'), 

     // ... 
    ); 
} 
+0

Я этого не знал! Большое спасибо, мне очень помогли! –

0

Планируете ли вы выбрать из таблицы LIKES и группы ими идентификатор пользователя и комментарий?
Если да, то вы можете использовать GROUP BY Пожалуйста, обратите внимание на SQLFiddle здесь
http://sqlfiddle.com/#!2/bc29b8/1/0
SELECT uid, cid, COUNT(likes.cid) FROM likes GROUP BY uid, cid

+0

Мне нужно использовать таблицу комментариев с отношением в этом случае. Если я эхо 'count ($ model-> нравится), он возвращает правое значение' 1'. –

+0

вы можете использовать 'DISTINCT', поэтому сделайте его как' DISTINCT user_id, comment_id, COUNT (likes.id) AS count_likes GROUP BY user_id, comment_id'? –

Смежные вопросы