1

我想知道人们对此有何看法......

我有一个名称列表(例如公司名称),并希望将它们显示为网页上的列表。我希望用户能够按字母顺序找到一组名称。因此,如果他们单击“M”,那么它将显示以字母 M 开头的公司名称。这听起来很简单,对吧?

然而,这里有一个问题:并非所有应该属于“M”类别的公司名称都以字母 M 开头,例如密歇根大学。所以使用

SELECT * WHERE Name LIKE 'M%'

在 SQL 查询中在这里不起作用。

以这种方式对数据进行分类的最佳方法是什么?

我能想到的唯一方法是在公司名称表中添加一列,并手动为每个公司名称分配一个字母,以便以后可以在 SELECT 语句中使用。这听起来很乏味和简陋,我希望有更好的方法来解决这个任务?如果有人想知道我正在使用 ColdFusion 作为我的后端软件来在网页上显示数据。

感谢您花时间帮助我:)

4

3 回答 3

2

如果每个公司名称都将有一个类别,并且您必须猜测类别是什么,那么有一个单独的列是正确的方法。

如果您只是想要一个“足够好”的猜测,其中公司名称可以出现在多个列表中,那么您可以将其放在名称中任何单词的第一个字母的类别中:

select *
from t
where ' '+name like ' M%'

然后,您可以通过删除一些单词来获得幻想,但这需要多次替换:

where ' '+replace(replace(replace(name, ' of', ''), 'University', ''), ' the', '') like ' M%'

但是,对于长期使用来说,这有点特别。它可能会搞砸诸如“办公室组”之类的事情。

于 2013-07-06T21:36:17.163 回答
2

考虑到这些是公司名称,您可以将它们的大写字母放在名称的开头或在描述中间添加一个空格:

SELECT * WHERE Name LIKE 'M%' OR Name LIKE '% M%';

这样,“密歇根大学”将列在字母 U 和 M 下(我认为这是一件好事),“麦当劳”或“麦当劳大学”也是如此,但不在“D”下这封信前面没有空格。

于 2013-07-06T23:32:25.867 回答
1

如果您希望能够任意将任何名称放在任何“字母类别”中,那么添加一列是您唯一的选择。如果您可以定义一组特定的规则来确定名称必须按哪个字母类别进行排序,那么您可以在 CF(或 JS)中编写排序函数。

于 2013-07-07T03:13:44.117 回答