我提取了一些表格数据,以帮助您重现我的问题。 SQL在这里(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!