MySQL and Pagination



下面是称为 list的表:

 Column Name   Data Type
   id             (Int)     
   user_one     (String)    
   user_two     (String)

我想在user_oneuser_two column中扫描用户。

作为回报,我想拿回到前100个记录和一个说有更多记录的标志。

解决方案#1:

ALTER TABLE list ADD FULLTEXT KEY `full_name` (`user_one`,`user_two`);
SELECT * FROM list WHERE MATCH(user_one, user_two) AGAINST ('john');

我相信解决方案1的性能会更好,但是我不确定如何添加100的limit并获得flag

解决方案#2:

SELECT * FROM list 
WHERE "john" LIKE Concat(Concat('%',user_one),'%') 
OR "john" LIKE  Concat(Concat('%',user_two),'%')
ORDER BY id
LIMIT 50

我认为解决方案#2较慢,如果有100多个记录,我不知道添加flag的最佳方法是什么。

最后,如果可能的话,我想最大程度地减少整个表扫描。

1)您可以得到101行,只使用100。如果您的数组大于100,则必须有更多行

SELECT * FROM list WHERE MATCH(user_one, user_two) AGAINST ('john') LIMIT 101;

2)使用 sql_calc_found_rows 在您的查询

SELECT SQL_CALC_FOUND_ROWS * FROM list WHERE MATCH(user_one, user_two) AGAINST ('john') LIMIT 100;
SELECT FOUND_ROWS();

使用限制时获取行总数?

最新更新