0

我目前正在通过来自 PHP 的两个单独的查询来执行此操作,但我希望以某种方式在单个查询中进行优化。

第一次查询..

SELECT `referrer` 
FROM `tbl_traffic_log` 
WHERE `domain` = 'mysite.com' 
  AND `referrer` != '$referringDomain' 
  AND CASE WHEN `clicks_in_unique`=0 THEN 2 ELSE `clicks_out_unique`/`clicks_in_unique` END < 1.4 
ORDER BY RAND() 
LIMIT 1

..如果 mysql_num_rows 没有显示任何结果,我会进行第二次查询以重试并检查是否有任何结果减去referrer!= 'partner1.com' 部分。

该代码基本上是试图找到一个随机的贸易伙伴,该伙伴不是发送该点击的伙伴,但如果没有匹配项,作为最后的手段,只要它符合其他条件,就可以发回。

我很确定有办法做到这一点,但在搜索后找不到方法(可能是因为我对问题的理解不足以输入正确的内容)。

也欢迎对该查询的任何其他批评。

谢谢 :)

4

1 回答 1

1

我认为你可以这样做:

SELECT `referrer` 
FROM `tbl_traffic_log` 
WHERE `domain` = 'mysite.com' 
  AND CASE WHEN `clicks_in_unique`=0 THEN 2 ELSE `clicks_out_unique`/`clicks_in_unique` END < 1.4 
ORDER BY `referrer` != '$referringDomain' desc, RAND() 
LIMIT 1

这个想法是将条件放在order by. 条件(在 MySQL 中)计算结果为 0 或 1,因此我们希望首先条件为真(因此是desc)。然后它选择一个随机行。如果没有条件为真的行,则它选择一个随机行。

于 2013-04-22T00:09:23.280 回答