分类数据库数据

时间:2013-07-06 21:29:37

标签: sql sql-server-2008 coldfusion sql-server-2012

我想知道人们的想法是什么......

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

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

SELECT * WHERE Name LIKE 'M%'
SQL查询中的

在这里不起作用。

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

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

感谢您抽出宝贵时间帮助我:)

3 个答案:

答案 0 :(得分:2)

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

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

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

然后你可以删除一些单词,但这需要多次替换:

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

然而,这对于长期使用来说有点特别。它可能会搞砸像“The Office Group”这样的东西。

答案 1 :(得分:2)

考虑到这些是公司名称,您可以依赖其大写字母在其名称的开头,或者在说明中间添加一个空格:

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

通过这种方式,“密歇根大学”将被列入字母U和M(我认为这是一件好事),因此将是“麦当劳”或“麦当劳大学”,但不是“ D“因为这封信不是以空格为前缀。

答案 2 :(得分:1)

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