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