我有一个公司注册人数据库(用于搜索/目录功能)。我们添加了一个新表格,以便为支付此功能的注册人(例如广告/其他图片/徽标等)保留“增强”信息。现在,新表只包含注册人唯一标识符和一些其他字段(图像路径等)。用户可以搜索具有特定条件的用户,并且增强的列表应显示在列表的顶部。结果不应该两次显示任何注册人(因此,如果用户具有增强的列表,则他们应该仅出现在顶部的“增强列表”区域中)。我怎么能做到这一点?
答案 0 :(得分:1)
从旧表到新表的左外连接。
在你的查询的前面加上“order by”“new_table.id为null然后是1,0结束时的情况”
所以,如果你有这个:
select foo, bar from old_table
order by bar, foo;
你有这个:
select a.foo, a.bar from old_table a
left join new table b on (a.customer_id = b.customer_id)
order by
case when new_table.customer_id is null then 1 else 0 end,
bar, foo;
编辑:我在代码中遗漏了外连接的“左”。
答案 1 :(得分:1)
如果您正在使用LINQtoSQL和设计器生成的实体,那么您应该在注册人实体上拥有一组实体相关信息 - 假设您已经设置了正确的外键关系。如果您稍后添加此内容,则可能需要手动添加(请参阅此处)或删除/重新添加您的实体以便设置它以获取新关系。然后你的查询将是:
var registrants = db.Registrants.Where( ... selection criteria here ... );
registrants = registrants.OrderByDescending( r => r.EnhancedData.Count() )
.ThenBy( r => r.Name ); // or normal sort order
大概数量为0或1,因此这应该将具有增强数据的数据放在结果的顶部。