限制搜索结果中字段值的数量

时间:2014-02-17 07:07:19

标签: php mysql

我运行真实的州网站,允许不同的用户添加他们的属性。 当有人搜索特定条件时,我们使用select语句和指定条件来选择匹配的属性,执行分页位并显示结果。

我们使用评级算法对每个属性进行评级,并使用它来优先显示所显示的属性。

简化版:

name            type      bedrooms           user  score
green house     sale      two bedrooms       alex  6
Blue one        rent      three bedrooms     jack  6
Blue one        sale      three bedrooms     jack  4
gray one        sale      three bedrooms     jack  6
green one       rent      three bedrooms     jack  6
purple one      rent      three bedrooms     jack  6
green one       rent      three bedrooms     jack  6
green one       rent      three bedrooms     gary  6

现在问题是有时一些属性具有相同的分数。在这些情况下,我不希望一个用户的属性支配搜索结果页面,我想设置一个限制,以在搜索结果页面中显示任何给定用户的最多三个属性。

在该示例中,我不希望jack拥有的属性占据第一页,其他用户的属性转到第二页。这会让其他用户感到不安,并给访问者带来不好的体验。

如果我只想为给定用户显示一个属性,我会使用Group by,但我不确定要限制哪个更大的数字(例如三个)。有什么我可以在mysql中做到这一点吗?

编辑:

很抱歉,如果它不够清楚。

use字段显示添加特定属性的用户。示例查询可以是

SELECT * FROM properties WHERE type = 'sale' LIMIT 5 ORDER BY score

结果可能是五个属性,都是由jack添加的。我想确保只有特定用户添加的属性才会包含在结果中。这样,其他用户添加的属性将有机会显示。

3 个答案:

答案 0 :(得分:1)

在您的查询中使用DISTINCT类似于此示例

SELECT DISTINCT column_name,table_name from table;

答案 1 :(得分:1)

使用DISTINCT它将解决您的问题。在表中,列可能包含许多重复值;有时你只想列出不同的(不同的)值.DISTINCT关键字可以用来只返回不同的(不同的)值。例 SELECT DISTINCT user FROM table_name;

答案 2 :(得分:1)

尝试使用此名称并使用您的表名

更改字符串your_table
SELECT 
    * 
FROM
    `your_table`
LEFT JOIN 
    (SELECT * FROM `your_table` LIMIT 3) as lr on lr.user = `your_table`.user
GROUP BY 
    user

reference link

更新2

如果您想按分数订购,可以使用

SELECT 
    * 
FROM
    `your_table`
LEFT JOIN 
    (SELECT * FROM `your_table` ORDER BY score DESC LIMIT 3) as lr on lr.user = `your_table`.user
GROUP BY 
    user