-1

我有很多网站用户,我想选择所有网站并按访问者数量对其进行排序。用户可以通过两种方式指定访客数量。他们可以手动将其作为字符串输入,该字符串存储在下面查询的 fb.visitor 中。

第二种方法是他的用户在他们的网站上安装一个 Javascript 跟踪代码,然后将条目添加到表 tracking_visits 中,并且访问总量是下面的 count(tv.id)。

我希望能够以两种方式对此结果进行排序。

1)我想使用两列在顶部获得最高结果,在底部获得最低结果。示例结果应该是:

  • 99'947 ( COUNT(tv.id) )
  • 75'412 ( COUNT(tv.id) )
  • 40'000 (fb.visitors)
  • 37'482 ( COUNT(tv.id) )
  • 30'000 (fb.visitors)

2)第二类我希望能够将所有 COUNT(tv.id) 放在首位,首先是最高的,然后在下面获得最高的 fb.visitors。例子:

  • 99'947 ( COUNT(tv.id) )
  • 75'412 ( COUNT(tv.id) )
  • 37'482 ( COUNT(tv.id) )
  • 40'000 (fb.visitors)
  • 30'000 (fb.visitors)

我当前的查询如下所示:

SELECT cs.userid, fb.visitors, COUNT( tv.id ) 
FROM campaigns_signups cs
INNER JOIN fe_blogs fb ON cs.userid = fb.userid
INNER JOIN tracking_visits tv ON tv.blogid = cs.userid
WHERE tv.visitdate
BETWEEN  "2013-09-04"
AND  "2013-10-04"
AND cs.campaignid =  "97"
AND cs.status <  "4"
GROUP BY tv.blogid
ORDER BY COUNT( tv.id ) , fb.visitors DESC

请注意,查询中的日期和整数只是示例。

这个查询的问题是它只选择在 tracking_visits 中有条目的结果。我想选择一个结果,让我得到在 tracking_visits 中有访问量的博主和在 fb.visitors 中有访问量的博客。

4

3 回答 3

1

对于您的第一个任务,您可以使用ORDER BY GREATEST(COUNT(tv.id), fb.visitors) DESC. 关于 GREATEST 的文档。对于您的第二个,您将要使用UNION. 关于 UNION 的文档。

如果对于您的第一个任务,您希望每个站点产生两行(一个代表两个值中的最大值,另一个代表最小),您可以再次使用UNION.

于 2013-10-04T09:13:23.277 回答
0

对于首先选择 COUNT(tv.id) 的第二个选项,我可以通过以下查询来完成此操作:

SELECT *, tv.tracked_visits
FROM campaigns_signups cs
INNER JOIN fe_blogs fb ON cs.userid = fb.userid

LEFT JOIN (    
SELECT blogid, COUNT( id ) AS  "tracked_visits"
FROM tracking_visits
WHERE visitdate
BETWEEN  "2013-09-04"
AND  "2013-10-04"                                               
GROUP BY blogid
) AS tv ON tv.blogid = cs.userid
WHERE cs.campaignid =  :campaignid
AND cs.status <  :status
ORDER BY tv.tracked_visits DESC , fb.visitors DESC
于 2013-10-04T09:28:55.317 回答
0

你正在寻找greatest

select greatest(ifnull(fb.visitors,0),count(tv_id)) from.... order by 1

select greatest(ifnull(fb.visitors,0),count(tv_id)) from.... 
order by 
case when greatest(ifnull(fb.visitors,0),count(tv_id))=fb.bisitors then 2 else 1 end, greatest(ifnull(fb.visitors,0),count(tv_id))

第二个按案例排序,按价值来源排序,然后按价值大小排序

于 2013-10-04T09:15:44.040 回答