在MySQL中我将如何做到这一点?
假设我有一个小部件数据库。我展示了每个小部件的前十个组的列表,按类别分开 假设我想显示类别a中所有小部件的列表,但我想根据该类别中小部件的总数对它们进行排序,并且只显示前10个分组 所以,我的清单可能是这样的 A类中的顶级分组 1990年,公司1生产了100个小部件。在MySQL中我将如何做到这一点?,mysql,Mysql,假设我有一个小部件数据库。我展示了每个小部件的前十个组的列表,按类别分开 假设我想显示类别a中所有小部件的列表,但我想根据该类别中小部件的总数对它们进行排序,并且只显示前10个分组 所以,我的清单可能是这样的 A类中的顶级分组 1990年,公司1生产了100个小部件。 1993年1号公司生产了90个小部件。 1993年,第三公司生产了70个小部件。 等(10组) 这一部分很简单,但现在让我们假设我希望某个分组始终显示在列表中,即使它实际上没有进入前十名 假设我总是想显示公司1在2009年生产的小
1993年1号公司生产了90个小部件。
1993年,第三公司生产了70个小部件。
等(10组) 这一部分很简单,但现在让我们假设我希望某个分组始终显示在列表中,即使它实际上没有进入前十名 假设我总是想显示公司1在2009年生产的小部件的数量,但我希望这个分组随机显示在我的列表中的某个地方(不是第一个或最后一个) 因此,结束列表应该类似于 A类中的顶级分组 1990年,公司1生产了100个小部件。
1993年1号公司生产了90个小部件。
2009年,公司1生产了30个小部件。
1993年,第三公司生产了70个小部件。
我将如何在MySQL中实现这一点 谢谢 编辑: 目前,我的查询如下所示
SELECT
year,
manufacturer,
MAX(price) AS price,
image_url,
COUNT(id) AS total
FROM
widgets
WHERE
category_id = A
AND
year <> ''
AND
manufacturer <> ''
GROUP BY
category_id,
manufacturer,
year
ORDER BY
total DESC,
price ASC
LIMIT
10
);
选择
年,
制造商
最高(价格)作为价格,
图片(网址),
总数(id)
从…起
小部件
哪里
类别_id=A
及
年份“
及
制造商“
分组
类别识别码,
制造商
年
订购人
总说明,
价格ASC
极限
10
);
这里没有强制分组
位置不一定是随机的,只是不应该是极端的。该列表应包括10组,包括强制列表。因此9+1我将使用联合查询:您当前的查询将2009年的查询联合起来,然后在表示层处理排序。您可以编写两个单独的查询(一个用于所有公司,另一个仅用于公司1),然后使用联合将它们连接在一起。最后,添加ORDER BY RAND()。 看起来像
SELECT * FROM
(
SELECT company_id, company_name, year, count(*) as num_widgets
....
LIMIT 10
UNION DISTINCT
SELECT company_id, company_name, year, count(*) as num_widgets
...
WHERE company_id =1
...
LIMIT 10
)x
ORDER BY RAND();
您可以在2009年为公司1添加一个字段,并将其包含在where子句中。差不多
select*from company,其中group='some group'或included=包含的真实订单,widgets\u made limit 10
对于随机部分,您可以将其作为子查询,然后包含一个列,如果您创建的字段为true,则该列的随机数为1到10,否则为rownum,然后按该列排序您是否询问有关编写SQL查询的问题?[@bear会吃掉您],我认为OP是我如何在MySQL中实现这一点的?只是一个问题-为什么随机放置?此外,除非X公司已经在10家公司中,否则该名单是否会是10家+X公司?或者,除非X公司已经在列表中,否则它会是9+X公司吗?我不会仅仅因为演示要求而添加一列,但我会使用“case when 2009…”语句来实现这个想法。