在MySQL查询中返回匹配结果的子集

时间:2012-12-12 17:41:45

标签: mysql search

我有一个包含元素和关键字的MySQL数据库。如果有人按关键字搜索元素,他们可能会获得大量的点击量。而不是返回匹配的所有元素,我想做的相当于返回第n组m元素。这将允许我显示前m个匹配元素,然后获取并显示下一个m个匹配元素等。

作为一个具体的例子,假设我有一个DB图像,我使用关键字“ball”进行搜索,共有500个匹配,我想查询DB返回前50个,然后是第二个50假设元素的顺序是确定性的(使用ORDER BY),我不知道如何子选择那些匹配元素的子集。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以在查询中添加LIMIT条件,允许您指定多个结果和结果偏移量。

示例:

SELECT * FROM table WHERE keyword = 'ball' LIMIT 0, 50

这将从结果偏移0 ..

开始给出前50个结果

要获得下一个50,您只需将其更改为:

SELECT * FROM table WHERE keyword = 'ball' LIMIT 50, 50

从结果偏移50开始,你得到50个结果。

通常,当您编写分页时(提供结果集的第1,2,3页),您需要在URL中传递您想要开始的偏移量,以便运行相同的查询但从不同的偏移。

答案 1 :(得分:0)

SELECT keyword, otherfield from table
WHERE keyword LIKE '$keywordvar%'
ORDER BY whatever ASC

然后,使用LIMIT clause

要将查询限制为前50次使用:

LIMIT 50;

要将查询限制为第二次使用50:

LIMIT 50, 50;

要将查询限制为第三次使用:

LIMIT 100, 50;

您可以将值更改为更大或更小的集。 您的最终查询将如下所示:

SELECT keyword, otherfield from table
WHERE keyword LIKE '$keywordvar%'
ORDER BY whatever ASC
LIMIT 50;

或者,如果您不使用通配符搜索并查找特定的关键字值:

SELECT keyword, otherfield from table
WHERE keyword = 'ball'
ORDER BY whatever ASC
LIMIT 50;