【问题标题】:Returning category id from mysql table从 mysql 表返回类别 id
【发布时间】:2012-05-14 04:36:38
【问题描述】:

我正在使用以下查询从“地点”表中返回所有“活动”条目。每个作者也可以包含在一个类别(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 | 
+-----+--------+--------+---------+-----------------+

【问题讨论】:

  • 如果用户包含在某个类别中,如何为每个条目返回 cat_id?
  • 把你的表结构,清楚的告诉我们你真正想要什么?

标签: php mysql codeigniter


【解决方案1】:

将 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

这可能会有所帮助

【讨论】:

  • LEFT JOIN (select userid, GROUP_CONCAT(cat_id) AS cat_id, user_id from user_cat group by user_id) AS d ON d.userid='$user_id' AND d.user_id=a.userid 我就是这样做的,这正是我需要的。
  • 很高兴它对你有帮助,只是想分享一件事,据我所知 GROUP_CONCAT 有 1024 个字符的限制;不知道它是否可以扩展。因此,如果您的数据超出它,它将对其进行修剪。
猜你喜欢
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2011-06-11
相关资源
最近更新 更多