我在数据库中有一个业务项目列表:
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
不,我想要做的是列出项目,但每个位置只有一个项目,如果有一个以上的项目,我想它有项目是随机的。加上仅显示状态为活动的项目。
现在,我的桌子是否设置为能够有效地执行此操作,或者我是否应该采用另一种方法?
发布于 2010-09-24 14:56:43
没有经过测试,但可能会有这样的效果:
SELECT
*
FROM
`listings`
WHERE
`status` = 'active'
GROUP BY
`location`
ORDER BY
RANDOM()
发布于 2010-09-24 14:58:10
you can retrieve rows in random order like this:
mysql> SELECT * FROM tbl_name ORDER BY RAND();
将其与WHERE子句相结合,只根据您想要包括的记录对其进行过滤,您就有了解决方案。
此外,如果您只有一个答案,那么在查询中使用LIMIT 1
,它将选取第一个结果(由于排序顺序),它将是一个随机结果。
发布于 2010-09-24 16:08:33
编辑:这个答案完全被修改了--我设法在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;
https://stackoverflow.com/questions/3788271
复制相似问题