Php 如何按返回的sql结果中出现时间最多的id对该结果进行排序

Php 如何按返回的sql结果中出现时间最多的id对该结果进行排序,php,mysql,list,sorting,Php,Mysql,List,Sorting,我有一个表offer\u cpv,它连接了另外两个“offer”和“cpv”。您可以在此处看到FIDLE: offer\u cpv有两列对我们很重要:offer\u id和cpv\u id 我的起始查询如下:从offer\u cpv中选择cpv\u id,其中offer\u id在(1,2,3,4)LIMIT 10中 如您所见,我需要根据提供id的数组返回所有cpv\u id(我将其传递到中的位置(提供id)) 我将得到以下结果: cpv_id 1010 1020 1030 2010 4030

我有一个表
offer\u cpv
,它连接了另外两个“
offer
”和“
cpv
”。您可以在此处看到FIDLE:

offer\u cpv
有两列对我们很重要:
offer\u id
cpv\u id

我的起始查询如下:
从offer\u cpv中选择cpv\u id,其中offer\u id在(1,2,3,4)LIMIT 10中

如您所见,我需要根据
提供id
的数组返回所有
cpv\u id
(我将其传递到
中的位置(提供id)

我将得到以下结果:

cpv_id
1010
1020
1030
2010
4030
4060
1010
2010
1010
1020
正如您所看到的,一些cpv_id正在重复,因为多个报价可能有相同的cpv_id链接到它们。我需要获得“最流行”cpv_id列表,我的意思是,如果某个id重复的时间最多,我需要它位于列表顶部。例如,这将是所需的输出:

cpv_id
1010
1020
2010
1030
4030
4060
正如你们所见,1010重复了3次,所以我希望它位于返回结果的顶部。然后是1020和2010,因为它们重复了2次,然后是其他,直到达到10的限制

用MYSQL和PHP可以做到这一点吗

谢谢

您需要
计数(*)
分组依据

SELECT cpv_id,count(*) as tot FROM offer_cpv 
WHERE offer_id IN (1,2,3,4) 
group by cpv_id
order by tot desc
LIMIT 10

您需要
计数(*)
分组依据

SELECT cpv_id,count(*) as tot FROM offer_cpv 
WHERE offer_id IN (1,2,3,4) 
group by cpv_id
order by tot desc
LIMIT 10

您可以使用distinct仅获取唯一值。以下是您的查询:

SELECT
    distinct cpv_id
FROM
    offer_cpv
WHERE
    offer_id IN (1,2,3,4)
LIMIT 10

您可以使用distinct仅获取唯一值。以下是您的查询:

SELECT
    distinct cpv_id
FROM
    offer_cpv
WHERE
    offer_id IN (1,2,3,4)
LIMIT 10