我正在使用以下查询从“place”表中返回所有“活动”条目。每个作者也可以包含在一个类别(cat_id)中,我也想将其返回以进行排序。 $ user_id表示登录用户的id,cat_id只应返回userid = $ user_id。我尝试了一些东西,但似乎无法让它工作。以下查询正在运行,但如果用户属于多个类别,则会返回该条目两次。
$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 |
+-----+--------+--------+---------+-----------------+
答案 0 :(得分: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
这可能会有所帮助