2011-01-21 39 views
0

我需要允许用户使用标题中的第一个字母来浏览一个具有> 100万个条目的表格。将字符串中的第一个字符与数字或非标准字符相匹配

我希望他们能够通过A-Z中的每个字母,0-9在列表中一起浏览并将所有其他字符一起浏览。

由于它是一个大型数据库,它将显示在网站上,我需要它是高效的。正则表达式不使用索引,所以这会太慢。

这是可能的,还是我将不得不重新考虑设计?

在此先感谢

回答

0

创建代表每个字母和数字的链接。单击这些链接将为用户提供从所选字符开始的数据库结果。

SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC; 

考虑将这些结果页分页到合适的块中。 MySQL将让你这样做有LIMIT

此命令将选择所需要的字符组中的第100条记录:

SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC 
LIMIT 0, 100; 

此命令将选择所需要的字符组的100个记录:

SELECT title FROM table 
WHERE LEFT(title,1) = ?Char 
ORDER BY title ASC 
LIMIT 100, 100; 

根据您的意见,如果您想使用正则表达式组合0-9 而不使用,您需要合并几个OR语句:

SELECT title FROM table 
WHERE (
    LEFT(title,1) = '0' 
    OR LEFT(title,1) = '1' 
    ... 
    ) 
ORDER BY title ASC; 
+0

Wont 10 LEFT(title,1)=“*”会很慢吗?那么从其他角色开始的标题呢?谢谢:) – Simon 2011-01-21 17:34:12

1

只要有一个在“标题”的索引,你应该能够使用SQL像

 
select * 
from myTable 
where Title like 'A%' 
(或“B%”,“C%” ...)

+0

对不起,我以为我已经包括在主题中,我已经在为A-Z做这件事。但问题是在一个查询中取出0-9,并且在一个查询中所有的标题不以A-Z0-9开头。 – Simon 2011-01-21 17:07:56

相关问题