有没有办法防止来自同一user_id的mySQL结果是顺序的?

时间:2015-08-21 17:37:31

标签: mysql

我有一张这样的产品表:

product_name | product_id | user_id

我在桌面上没有很多排序选项,但是我想这样做,以便来自同一user_id的产品不会一个接一个地出现,例如:

product from 21
product from 21
product from 21
product from 17
product from 17
product from 17
product from 53
product from 53
product from 53

mySQL是否有任何简单的方法可以将它随机化,以便它显示如下?

product from 21
product from 53
product from 17
product from 21
product from 17
product from 53
product from 21
product from 17
product from 53

我知道您可以随机返回结果,但如果有多个页面则会出现问题,然后结果可能会重复。

那么,有没有简单的方法让mySQL知道hey, you can't show 2 results of user 21 together

1 个答案:

答案 0 :(得分:0)

一种方法是... ORDER BY rand()。对我来说,这有点草率,因为每次运行查询时都会得到不同的结果,但它确实有效。混合顺序的一种方法是组合字段以生成简单的哈希。例如,

SELECT * FROM `products` ORDER BY `product_id` * `user_id`

这样,如果查询多次运行,结果总是相同的,但每个查询都会得到一个准随机顺序。这样做的另一个好处是允许您对结果进行分页,因为无论LIMIT是什么,每个查询的顺序都是相同的。您可以尝试添加字段,减去字段,甚至组合多个操作。

添加更多准随机性的另一种方法是在产品名称上执行字符串函数。例如,在产品名称中搜索第一个“b”的位置,并将其添加到产品/用户哈希中:

SELECT * FROM `products` ORDER BY `product_id` * `user_id` + INSTR(`product_name`, 'b')

使用字符串函数比乘法更加“昂贵”,但如果第一个查询没有足够混淆结果,那么这可能会。