我的表格包含以下字段:
id (int 4 ) AI Pri Index
headline varchar 255
content text
source varchar 55
score double
所以我的问题是:
SELECT * from testimonials WHERE score > 8 ORDER BY rand()
这完全适合我的10个评分中的主要证言,但是现在我有一个标记为5的新组合,我需要设计一种新的方法来将它们拉出来并将它们混合在一起。
到目前为止,我已删除了分数> 8子句,并在我的脚本中添加了一个SWITCH限制子句,以删除< 8 for source 1,< 3为source2。
这些现在按DESC的顺序显示,但我希望整个批次是随机的,或者至少在结果中将source1和source2混合在一起。
我更愿意在查询中执行所有这些操作... 有什么想法吗?
答案 0 :(得分:4)
添加一个值为max max的列 - 下面称为max_score。所以在你的情况下它是5或10.然后使用百分比进行标准化:
SELECT * from testimonials WHERE (score/max_score) > 0.8 ORDER BY rand()
易。
答案 1 :(得分:1)
如何根据source
在现场进行规范化?然后你不必添加另一个字段:
SELECT source, score FROM testimonial WHERE (score/IF(source='1',10,5)) >= .8;
这假设source
可以是1或2。
答案 2 :(得分:1)
您只需在工作查询中添加一个简单的OR条件:
vadu=get_unique_values(3Darray)
这选择分数> 8为source1和>如您的SWITCH解释建议的那样,对于source2有3个。
答案 3 :(得分:0)
您需要按来源分开。内联已知来源
SELECT score,
CASE source
WHEN 1 THEN 10
WHEN 2 THEN 5 ...
END CASE as max_score
FROM testimonials
WHERE (score/max_score*10) > 8
ORDER BY rand()
或者创建一个源表并加入它们
SELECT t.score,
s.max_score
FROM testimonials t
LEFT JOIN source_table s
ON s.source=t.source
WHERE (t.score/s.max_score*10) > 8
ORDER BY rand()