表中SQL的数据顺序

时间:2011-06-07 17:00:02

标签: sql data-mining

所以这很奇怪。

我搜索了“个人资料”表格中存在的人,我们让人们成为一个人的粉丝。他们可以喜欢他们。

[档案]
[uid,first,last,location]

[收藏]
[A] [B]

配置文件表包含一些基本信息(不仅如此,但需要显示所有内容),最喜欢的表由2个唯一ID组成。 A有B作为最爱。 (A - > B)。从选择结果我想显示不同的消息(这是你的朋友组,这是其他结果)。

SELECT P.firstname, P.lastname, P.location, P.uid, 2 AS type
FROM profile AS P
    JOIN favorites AS F
    ON F.A = 'myid' and F.B = P.uid
WHERE (P.firstname LIKE 'mich%' or P.lastname LIKE 'mich%')  

因此,第一个获得我认为最喜欢的所有人。第二,我如何获得一般结果并将其附加到那些没有重复结果?

我试过这样的事情。

SELECT P.firstname, P.lastname, P.location, P.uid, 2 AS fan
FROM profile AS P
    JOIN favorites AS F
    ON F.A = P.uid and F.B = 'myid'
WHERE (P.firstname LIKE 'micha%' or P.lastname LIKE 'micha%')
  UNION
SELECT P.firstname, P.lastname, P.location, P.uid, 1 AS fan
FROM profile AS P
    JOIN favorites AS F
    ON F.A != P.uid and F.B = 'myid'
WHERE (P.firstname LIKE 'micha%' or P.lastname LIKE 'micha%')

2 个答案:

答案 0 :(得分:4)

我认为你可以使用case语句和左连接将它组合成一个简单的查询:

select p.firstname, p.lastname, 
   p.location, p.uid, 
   case when f.A is null then 1
   else 2
       end as type
from profile as p
left join favorites as f
 on p.uid = f.B and f.A = 'myid'
where p.firstname like 'mich%' or p.lastname like 'mich%'

这将搜索WHERE子句的配置文件,如果它与您的收藏夹匹配,则类型字段将评估为2,否则它将为1。

答案 1 :(得分:0)

我相信这就是你想要的......

SELECT P.firstname, P.lastname, P.location, P.uid, CASE F.A = P.uid THEN 2 ELSE 1 END AS fan
FROM profile AS P
    LEFT JOIN favorites AS F
    ON  F.B = P.uid
WHERE (P.firstname LIKE 'micha%' or P.lastname LIKE 'micha%')