2012-05-12 3 views
0

WHERE (uid = {$uid} OR uid = **HERE**)ここで**HERE**cidであるすべての行を、以下のクエリ2から検索したいと思います。これらの2つの選択クエリをORケースと組み合わせるには

クエリ1:

SELECT * FROM `t_activities` 
    WHERE (`uid` = {$uid} OR `uid` = **HERE**) 
    AND `del` = 0 
    GROUP BY `fid` 
    ORDER BY `time` DESC 
    LIMIT 10 

とクエリ2:

SELECT * 
FROM `t_activities` ta left outer join 
    (SELECT `cid` 
     FROM `t_con` 
     WHERE `uid` = {$uid} AND `flag` = 1) 
    ) tc 
    on ta = tc.cid 
WHERE (`uid` = {$uid} OR tc.`uid` is not null) AND `del` = 0 
GROUP BY `fid` 
ORDER BY `time` DESC 
LIMIT 10 

ところで、よう:

SELECT `cid` FROM `t_con` WHERE `uid` = {$uid} AND `flag` = 1 

答えて

2
SELECT * FROM `t_activities` 
WHERE (`uid` = {$uid} OR `uid` in (SELECT `cid` 
            FROM `t_con` 
            WHERE `uid` = {$uid} AND `flag` = 1)) 
AND `del` = 0 
GROUP BY `fid` 
ORDER BY `time` DESC 
LIMIT 10 
+0

このメソッドとは何ですか?私は 'Joins'、 'left join'、 'Inner join'などを探していましたが、把握できませんでした。ありがとうございます。 – ptamzz

+1

サブクエリと呼ばれます。 –

1

あなたにも参加してこれを行うことができます"GROUP BY fid"が非常に奇妙に見えるSQL文。これはmysqlで許されていますが、それは悪い習慣だと私は思っています。あなたがやっていることについて、明示的であることをはるかに優れている:

SELECT fid, min(<field1>) as Field1, . . . 

これは、あなたが戻ってクエリに行くか、それを修正しようとすると、ミスを防ぐことができます。

関連する問題