2012-05-14 5 views
0

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

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 

にuser_catテーブルに参加

$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

質問は何ですか? –

+0

ユーザーがカテゴリに含まれている場合、どのエントリのcat_idを返すのですか? – Ciprian

+0

テーブルの構造を入れ、あなたが本当に望むものを明確に教えてください。 –

答えて

4

変更は

+0

LEFT JOIN(ユーザID、GROUP_CONCAT(cat_id)AS cat_id、user_idからuser_idをuser_idから選択してください)AS d ON d.userid = '$ user_id' AND d.user_id = a.userid' 私はこれを好きでしたまさに私が必要なものです。 – Ciprian

+0

うれしいことですが、私の知る限り、GROUP_CONCATには1024文字の制限があります。それが拡張できるかどうかは考えられません。あなたのデータがそれを超えている場合は、それをトリミングします。 – Junaid

+0

余分なチップをありがとうございます。私はそれを超えることはないと思う。 – Ciprian

関連する問題