我正在努力在表格行中显示分类广告页面。我试图解决的问题是以减少页面空白量的方式排列广告,同时保持随机顺序。
一些无序广告的图表:
_______________ __________________
ad text here. | another ad here
this ad has | (2)
more text than | [ unwanted
that ad. (1) | white-space ]
_______________|__________________
我想要做的是按char_length排序结果,还要将结果随机分组为2或3,或其他任何组合。
我现在的查询是:SELECT * FROM ads ORDER BY CHAR_LENGTH(adtext)limit $ page,$ ads_per_page(使用PHP)
这给我的结果看起来像:
_______________ ___________________
short ad. (1) | another short ad. (2)
_______________|___________________
ad that's a (3)| another little
little longer. | longer ad. (4)
_______________|___________________
ads keep (5) | this ad has the
getting longer | most text out of
in char_length | all the ads... (6)
这对于减少空白区域非常有用,但我仍然需要将这些结果随机化。在MySQL中是否有可能将这些结果随机化为2组,3组或其他组?
换句话说,有什么能给我带来如下结果:
_______________ ___________________
ads keep (1) | this ad has the
getting longer | most text out of
in char_length | all the ads... (2)
_______________|___________________
short ad. (3) | another short ad. (4)
_______________|___________________
ad that's a (5)| another little
little longer. | longer ad. (6)
有什么想法吗?
谢谢, 利
答案 0 :(得分:1)
这是一个非答案,但是
我建议将此逻辑移至客户端。使用高级语言比在数据库中使用它会更容易。
答案 1 :(得分:0)
如果它不必是随机的,只需看起来随机,您可以先构建按字符排序的行,然后按子串(3,1)或其他顺序排序。
我也同意p.campbell,这在数据库中更容易实现。
答案 2 :(得分:0)
怎么样:
set @N = 0;
SELECT * FROM (
SELECT @N := @N +1 AS number,id,text FROM ads ORDER BY CHAR_LENGTH(text) limit 100
) as ads ORDER BY (case when ads.number % 2 = 0 then 1 else 0 end) , RAND()
首先选择按字段长度排序的所有内容,添加一个计数器。 然后在第二个查询中,哪个文本通过一个接一个地循环进入哪个列,这就是第一个排序标准(模2是你的两个columsn,你可以做更多)然后随机化每列中的结果
请注意,mysql rand函数非常非常慢。你应该使用一些优化的版本,你必须添加你的限制条件