我有一个数据库中企业的项目列表:
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
不,我想要做的是列出项目,但每个位置只有一个项目,如果我想要的位置有多个项目,则该项目是随机的。加上仅显示状态=活动的项目。
现在我的桌子设置为能够有效地执行此操作还是应该转到其他路径?
答案 0 :(得分:1)
未经测试,但也许这样的事情会起作用:
SELECT
*
FROM
`listings`
WHERE
`status` = 'active'
GROUP BY
`location`
ORDER BY
RANDOM()
答案 1 :(得分:1)
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;
小心!对大型桌子来说效率很低。