MySQL随机选择

时间:2010-09-24 14:54:07

标签: php mysql select random

我有一个数据库中企业的项目列表:

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

不,我想要做的是列出项目,但每个位置只有一个项目,如果我想要的位置有多个项目,则该项目是随机的。加上仅显示状态=活动的项目。

现在我的桌子设置为能够有效地执行此操作还是应该转到其他路径?

4 个答案:

答案 0 :(得分:1)

未经测试,但也许这样的事情会起作用:

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

答案 1 :(得分:1)

MySQL manual states

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

将它与WHERE子句相结合,仅按您想要包含的记录对其进行过滤,并获得解决方案。

此外,如果您只有一个答案,请在查询中使用LIMIT 1,然后选择第一个结果(由于排序顺序)将是随机结果。

答案 2 :(得分:1)

修改 这个答案是完全修改过的 - 我设法在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;

答案 3 :(得分:1)

我认为这个查询的逻辑是正确的:

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

小心!对大型桌子来说效率很低。