这种mysql查询可能吗?
SELECT power
FROM ".$table."
WHERE category IN ('convertible')
AND type = bwm40%
AND type = audi60%
ORDER BY RAND()
会是这样的:从所有的汽车中,选择可转换的汽车的力量,但40%的选择将是宝马和其他60%的奥迪。
可以用mysql完成吗?
似乎无法使其与下面的ideea一起工作,给我一个错误,这是我尝试的方式:
$result = mysql_query("
SELECT power, torque FROM ".$table."
WHERE category IN ('convertible')
ORDER BY (case type when 'bmw' then 0.4 when 'audi' then 0.6) * RAND() DESC
LIMIT ".$offset.", ".$rowsperpage."");
答案 0 :(得分:2)
您可以尝试使用CASE调整随机性:
SELECT power
FROM table
WHERE category IN ('convertible')
AND type IN ('bwm', 'audi')
ORDER BY (case type when 'bwm' then Wbwm when 'audi' then Waudi) * RAND() DESC
Wbmw
和Waudi
是加权因素。然后你要添加一个LIMIT子句来砍掉你想要的大小的结果。这不能保证你想要的比例,但它可能足以满足你的目的。
您希望稍微使用加权因子(Wbmw
和Waudi
)来获得所需的结果。加权因子将取决于数据库中bwm
和audi
的频率,因此0.2和0.8可能会更好。正如克里斯在评论中指出的那样,只有在宝马和奥迪之间有50/50的分配时,0.4和0.6才有效。将权重放在一个单独的表中会使这种方法更容易维护,SQL会更漂亮。
答案 1 :(得分:0)
怀疑这可以在一个声明中正确完成。我个人会:
COUNT()
,在查询中一起抓取它们。LIMIT
根据所需百分比设置为正确的金额和偏移量(因此,如果您想要20个结果,从40开始,宝马如果是40%,那么限制将是从16开始的8个结果 - 它们需要是整数值)UNION
合并结果,ORDER BY RAND()
将它们混合在一起。这只是两个实际查询,一个用于计数,一个用于结果的组合查询,如果性能是一个很大的问题,您可以将它们组合在一个存储过程中。
您可以使用结果中的语句prepare / execute来组合它们 - 查看this method from a possible duplicate question。