【发布时间】:2016-10-22 00:16:57
【问题描述】:
我的目标是选择一个随机企业,然后使用该企业的 id 获取他们所有的广告。我从我的查询中得到了意想不到的结果。返回的广告行数始终是我假设的“SELECT id FROM Business ORDER BY RAND() LIMIT 1”的值。我有 3 个商家,只有 1 个商家有广告行(其中 5 个),但它始终显示同一商家的 5 个广告中的 1-3 个。
SELECT * FROM Advertisement WHERE business_id=(SELECT id FROM Business ORDER BY RAND() LIMIT 1) ORDER BY priority
广告和商业表格的数据:
INSERT INTO `Advertisement` (`id`, `business_id`, `image_url`, `link_url`, `priority`) VALUES
(1, 1, 'http://i64.tinypic.com/2w4ehqw.png', 'https://www.dennys.com/food/burgers-sandwiches/spicy-sriracha-burger/', 1),
(2, 1, 'http://i65.tinypic.com/zuk1w1.png', 'https://www.dennys.com/food/burgers-sandwiches/prime-rib-philly-melt/', 2),
(3, 1, 'http://i64.tinypic.com/8yul3t.png', 'https://www.dennys.com/food/burgers-sandwiches/cali-club-sandwich/', 3),
(4, 1, 'http://i64.tinypic.com/o8fj9e.png', 'https://www.dennys.com/food/burgers-sandwiches/bacon-slamburger/', 4),
(5, 1, 'http://i68.tinypic.com/mwyuiv.png', 'https://www.dennys.com/food/burgers-sandwiches/the-superbird/', 5);
INSERT INTO `Business` (`id`, `name`) VALUES
(1, 'Test Dennys'),
(2, 'Test Business 2'),
(3, 'Test Business 3');
【问题讨论】:
-
如果我没记错的话,为了随机订购你需要
SELECT RAND() AS r .... ORDER BY r;否则,ORDER BY RAND()按来自RAND()的单个结果排序,类似于ORDER BY 1或ORDER BY NOW()。 当然,使用该子查询会产生问题。 -
我不确定我是否理解。 “SELECT id FROM Business ORDER BY RAND() LIMIT 1”在单独使用时似乎可以正常工作(在我的情况下,对于 3 个企业返回 1 到 3 之间的数字)。我不明白为什么这个号码没有正确分配给子查询之外的 business_id。
-
能否请您发布您正在尝试查询的数据,因为我已尝试从广告中返回 5 of 5。
-
您可以发布您正在使用的查询吗?我会试试看它是否适合我。
-
我用数据编辑了 OP。