我目前正在通过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'部分。
代码基本上是在寻找一个不是发送该点击的合作伙伴的随机贸易伙伴,但如果没有匹配,作为最后的手段,只要它与其他标准匹配就可以发回。 / p>
我很确定有一种方法可以做到这一点,但是在搜索之后找不到方法(可能是因为我不能理解问题足以输入正确的东西)。
欢迎任何其他对该查询的批评。
谢谢:)
答案 0 :(得分: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
)。然后它选择一个随机行。如果条件为真的行没有,那么它会选择一个随机行。