每个类别获得N个结果,并按行过滤每第三个结果

时间:2015-03-03 11:25:02

标签: mysql sql

我提取了一些表格数据,以帮助您重现我的问题。 SQL在这里(SQL根据我当前的问题进行了调整,因此我没有包含所有列或所有数据,因为它不需要)

http://tzfrs.de/dev/test.sql

现在,我正在做的是以下内容。我想每个类别获得6个pois。这适用于以下查询

SELECT x.id, x.fsqPoi, x.name, cpc.catName, cpc.className 
FROM (
    SELECT bp.id, bp.categoryId, bp.fsqPoi, bp.name, 
        CASE WHEN bp.categoryId = @type 
            THEN @rownum := @rownum + 1 
            ELSE @rownum := 1 
        END AS rank, 
    @type := bp.categoryId FROM (
        select * from pois WHERE cityId = "25" order by id
    ) bp JOIN (
        SELECT @rownum := 0, @type := NULL
    ) r ORDER BY categoryId ) x INNER JOIN poi_categories cpc ON cpc.id = x.categoryId 
WHERE x.rank <= 6 ORDER BY x.categoryId

这将为poi表中的每个类别返回6个poi。您可以通过在WHERE x.rank <= XXX定义数字来调整每个类别的pois数量。

我目前遇到的问题如下。 如您所见,我有一列fsqPoi,表示是否已从Foursquare收集POI。

我想,每个第一,第四和第七个POI必须是Foursquare的POI。 POI 2,3,5,6,8和9可以是随机的,这意味着它们可以来自Foursquare,但不是必须的。

这就是我被困的地方。我不知道如何调整查询以使其工作,我也不知道这是否有效。如果你能帮助我,我将不胜感激。 Muchas Gracias!

0 个答案:

没有答案