我需要允许用户使用标题中的第一个字母来浏览一个具有> 100万个条目的表格。将字符串中的第一个字符与数字或非标准字符相匹配
我希望他们能够通过A-Z中的每个字母,0-9在列表中一起浏览并将所有其他字符一起浏览。
由于它是一个大型数据库,它将显示在网站上,我需要它是高效的。正则表达式不使用索引,所以这会太慢。
这是可能的,还是我将不得不重新考虑设计?
在此先感谢
我需要允许用户使用标题中的第一个字母来浏览一个具有> 100万个条目的表格。将字符串中的第一个字符与数字或非标准字符相匹配
我希望他们能够通过A-Z中的每个字母,0-9在列表中一起浏览并将所有其他字符一起浏览。
由于它是一个大型数据库,它将显示在网站上,我需要它是高效的。正则表达式不使用索引,所以这会太慢。
这是可能的,还是我将不得不重新考虑设计?
在此先感谢
创建代表每个字母和数字的链接。单击这些链接将为用户提供从所选字符开始的数据库结果。
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;
只要有一个在“标题”的索引,你应该能够使用SQL像
select *
from myTable
where Title like 'A%'
(或“B%”,“C%” ...)
对不起,我以为我已经包括在主题中,我已经在为A-Z做这件事。但问题是在一个查询中取出0-9,并且在一个查询中所有的标题不以A-Z0-9开头。 – Simon 2011-01-21 17:07:56
Wont 10 LEFT(title,1)=“*”会很慢吗?那么从其他角色开始的标题呢?谢谢:) – Simon 2011-01-21 17:34:12