我运行真实的州网站,允许不同的用户添加他们的属性。 当有人搜索特定条件时,我们使用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添加的。我想确保只有特定用户添加的属性才会包含在结果中。这样,其他用户添加的属性将有机会显示。
答案 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
更新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