0

以下のクエリを使用して、「place」テーブルからすべての「アクティブ」エントリを返します。各著者をカテゴリ(cat_id)に含めることもできます。また、並べ替えの目的でそれを返したいと思います。$ user_idはログインしたユーザーのIDを表し、cat_idはuserid =$user_idの場合にのみ返されます。いくつか試してみましたが、うまくいかないようです。以下のクエリは機能していますが、ユーザーが複数のカテゴリに属している場合、エントリが2回返されます。

$active = 1;
$query_str = "SELECT a.*,b.user_id,c.username,c.fbook, d.cat_id FROM place a
LEFT OUTER JOIN wait b ON a.id=b.post_id AND b.user_id='$user_id'
JOIN users c ON a.userid=c.id
LEFT OUTER JOIN user_cat d ON d.userid='$user_id' AND d.user_id=a.userid
WHERE ACTIVE = ? ORDER BY a.date desc";
$q = $this->db->query($query_str, $active);

user_catテーブル

+-----+--------+--------+---------+-----------------+
| id  | userid | cat_id | user_id | fbid            |
+-----+--------+--------+---------+-----------------+
| 295 |    268 |     52 |     277 | 100001077604247 | 
| 296 |    268 |     52 |     271 | 100000021742637 | 
| 297 |    268 |     53 |     276 |               0 | 
| 298 |    268 |     53 |     272 | 100000038821713 | 
| 299 |    268 |     53 |     275 |               0 | 
+-----+--------+--------+---------+-----------------+
4

1 に答える 1

4

user_catテーブルの結合をに変更します

LEFT JOIN (select userid, cat_id from user_cat group by user_id) AS d ON d.userid='$user_id' AND d.user_id=a.userid

これは役立つかもしれません

于 2012-05-14T07:50:35.207 に答える