0

以下のクエリ2から取得したsがWHERE (uid = {$uid} OR uid = **HERE** )どこにあるかすべての行を選択したいと思います。**HERE**cid

クエリ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 `cid` FROM `t_con` WHERE `uid` = {$uid} AND `flag` = 1
4

2 に答える 2

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
于 2012-05-12T15:25:11.607 に答える
1

これは、結合としても実行できます。

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

ちなみに、SQLステートメントとしての「GROUPBYfid」は非常に奇妙に見えます。これはmysqlで許可されていますが、これは悪い習慣だと思います。あなたがしていることについて明確にすることははるかに良いです:

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

これにより、クエリに戻ったり、クエリを変更したりするときに間違いを防ぐことができます。

于 2012-05-12T16:08:17.980 に答える