gpt4 book ai didi

php - MySQL 按随机顺序但显示不同的前 5 个结果?

转载 作者:行者123 更新时间:2023-11-29 08:58:23 26 4
gpt4 key购买 nike

好的,我有 3 个 MySQL 表

类别公司优惠

我希望有人点击“类别”页面,从而以随机顺序向他们显示每家公司的报价,这样就不会优先考虑任何人。一家公司可以有 1 到 10 个报价,并且可以有任意数量的报价链接到一个类别。

这一切都工作正常,但我希望显示来自独特公司的前 5 名(或更多,无论最简单的)报价。下面的其他内容可以按任意顺序排列,只要它们不重复前 5 名中已显示的内容即可。

不确定解决这个问题的最佳方法,因为这有点超出了我的能力 - 是否可以执行 2 个查询并左连接它们,从第二个查询中的第一个查询中排除报价 ID?

非常感谢任何帮助!

最佳答案

必须有一种更有效的方法来做到这一点,但我的大脑今天还没有达到 100% 的状态。怎么样-

SELECT
company_offers.companyid,
offers.offerid,
offers.title,
offers.offer
FROM (
SELECT
companies.companyid,
(
SELECT offers.offerid
FROM offers
WHERE offers.companyid = companies.companyid
AND categoryid = '%s'
AND active = 1
ORDER BY RAND()
LIMIT 1
) AS offerid
FROM companies
WHERE EXISTS (SELECT NULL FROM offers WHERE offers.companyid = companies.companyid AND offers.categoryid = '%s' AND offers.active = 1)
ORDER BY RAND()
LIMIT 5
) AS company_offers
INNER JOIN offers
ON company_offers.offerid = offers.offerid

更新:将 EXISTS 添加到内部公司 SELECT

然后从主 SELECT 语句中排除这 5 个 Offer_ids。

SELECT companies.companyid, offers.offerid, offers.title, offers.offer
FROM offers
INNER JOIN companies
ON companies.companyid = offers.companyid
WHERE offers.categoryid = '%s'
AND offers.active = 1
AND offers.offerid NOT IN (comma separated list of 5 from previous query)
ORDER BY RAND()

关于php - MySQL 按随机顺序但显示不同的前 5 个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com