0

我想选择从下面的查询 2WHERE (uid = {$uid} OR uid = **HERE** )中检索到的**HERE**所有行。cid

查询一:

    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 语句,“GROUP BY fid”看起来很奇怪。这在 mysql 中是允许的,但我认为这是一个不好的做法。明确说明您在做什么会更好:

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

这有助于在您返回查询或尝试修改查询时防止错误。

于 2012-05-12T16:08:17.980 回答