2013-07-06 87 views
1

我想知道什麼人民的心思都放在了這個.....分類數據庫數據

我的名字(如公司名稱)的列表,並希望將其顯示爲網頁上的列表。我希望用戶能夠按字母順序查找一組名稱。所以如果他們點擊'M',那麼它將顯示以字母M開頭的公司名稱。這聽起來很簡單,對嗎?

但是,這裏有一個問題:不是所有應該在'M'類別中的公司名稱都以字母M開頭,例如密歇根大學。因此,在SQL查詢中使用

SELECT * WHERE Name LIKE 'M%' 

在這裏不起作用。

以這種方式對數據進行分類的最佳方法是什麼?

我能想到的唯一方法是在公司名稱表中添加一列,並手動爲每個公司名稱分配一個字母,以便稍後可以在SELECT語句中使用。這聽起來很乏味,很簡單,我希望有更好的方法來解決這個問題。如果有人想知道我使用ColdFusion作爲我的後端軟件在網頁上顯示數據。

感謝您抽出時間來幫我:)

+0

規則的可行性(例如,「名稱出現在名稱後面的單詞是主要的分類術語」)將取決於名稱的一致性,它可能適用於大學名稱,名稱可能會有很大的變化,導致猜測。數據管理並不缺乏乏味,BTW。:-) – Tim

回答

1

如果您希望能夠任意添加任何「字母類別」中的任何名稱,那麼添加一列是您唯一的選擇。如果您可以定義一組特定的規則來確定名稱必須按哪個字母類別排序,那麼您可以在CF(或JS)中編寫排序功能。

2

如果每家公司的名字將會有一個確切的類別,你必須猜測的範疇是什麼,然後有一個單獨的列是正確的做法。

如果你只是想要一個「足夠好」的猜測,其中一個公司的名字可以出現在一個以上的列表中,那麼你可能把它放在任何字的名字的第一個字母的類別:

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

然後,您可以得到通過去除一些話花哨,但是這需要多個替代對象:

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

然而,就是有點特設長期使用。而且它可能會讓「辦公室組織」變得糟糕。

2

考慮到這些公司的名字,你可以依靠他們的大寫字母是無論是在他們的名字的開頭或在說明中間的空格前綴:

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

這樣「密歇根大學「將列在字母U和M下(我認爲這是一件好事),所以將是」麥當勞「或」麥當勞大學「,但不在」D「下,因爲這封信不是由一個空格前置。