MySQL的选择随机(MySQL Select by random)

2019-09-29 07:18发布

我有一个项目在数据库业务的列表:

listings
  `id` `location` `item` `status`

因此,在数据库中,我可能是这样的:

19  Loc A   Green Beans for $12     active
20  Loc B   Two Gatoraids for $3    deactive
21  Loc A   Ham for $2 per lb       active
22  Loc A   Pepsi 2 for $2      active
23  Loc C   House plants $10    active
24  Loc B   Milk Gallon for $1     active
25  Loc C   Ice cream for $5    active

没有什么,我想要做的是列出的项目,但每个位置只有一个项目,如果有对我想要的位置以上的项目有它的项目是随机的。 加上只显示项,状态=活动。

现在是我的表设置为能够有效地做到这一点,或者我应该走另一条路线?

Answer 1:

没测试过,但也许这样的事情会工作:

SELECT
  *
FROM
  `listings`
WHERE
  `status` = 'active'
GROUP BY
  `location`
ORDER BY
  RANDOM()


Answer 2:

在MySQL手册状态 :

you can retrieve rows in random order like this:
mysql> SELECT * FROM tbl_name ORDER BY RAND();

再加上一个WHERE子句仅要包括记录对其进行过滤,你有解决方案。

另外,如果你只有一个一个答案,使用LIMIT 1您的查询,它会选择第一个结果,(因为排序顺序),将是一个随机。



Answer 3:

我觉得我有这个查询的逻辑正确的:

SELECT * 
FROM (
    SELECT *
    FROM smt
    WHERE status='active'
    ORDER BY RAND()
) AS random 
GROUP BY random.location;

小心! 这是大表非常无效。



Answer 4:

编辑:这个答案是完全修订-我设法正确测试它MySQL和实现测试上的MS Access的SQL(不是一个好主意,反正)是给我完全不同的结果。

我认为你需要使用这样的事情:

SELECT l.id, s.location, s.item
FROM listing AS l, 
          (SELECT location, item, status
           FROM listing
           WHERE status='active'
           ORDER BY RAND()) AS s
WHERE l.location=s.location
AND l.status = 'active'
GROUP BY location;


文章来源: MySQL Select by random