2010-08-03 47 views
0

我有一個名稱和類型字段的表。該類型字段包含人的音樂品味這樣:如何從數據庫中過濾這些數據?

「搖滾;流行音樂;金屬;舞」(VARCHAR)

我需要生成與這個人的音樂品味分組Excel列表。

例如:

  1. 一個與大家在巖列表;金屬;舞蹈
  2. 與Rock中的每個人一起;金屬;恍惚
  3. 另一個與搖滾(僅巖)
  4. 等等...

每個用戶只能在一個列表。 我需要這個列表來導入我的通訊軟件。每種類型都是郵件列表。

我需要執行各種組合,然後在獲得結果時創建列表。 我想知道哪種方法是最好,最快速的方法。 可以變成一個PHP腳本,甚至只是SQL。

Ps .: 我需要這個數據來自其他人創建的舊數據庫。我同意,這是一種可怕的存儲方式。

+8

雖然這不是一個回答你的問題,你應該考慮規範化數據庫。 – 2010-08-03 15:34:35

+0

字符串可能是「Metal; Rock; Dance」嗎?這與「搖滾,金屬,舞蹈」有什麼不同?它總是那種確切的格式,或者是空格有時會丟失,有時是逗號而不是分號等等? – 2010-08-03 15:35:09

+0

我需要由其他人創建的舊數據庫中的這些數據。我同意,這是一種可怕的存儲方式。順序似乎總是一樣的。在這種情況下,想一想,似乎GROUP BY將創建所有列表。如果沒有,我可以使用ORDER BY,然後像Scott說的那樣分割。 – 2010-08-03 15:49:31

回答

2

在我看來,你可以運行這個簡單的查詢:

SELECT * FROM table_name ORDER BY music_taste_field 

,然後分裂的結果了的music_taste_field時的變化值。你可以手動或者使用PHP。

另外,正如其他人所評論的那樣,這是存儲音樂偏好的一種可怕方式。

0

另一個錯誤的數據庫設計(今天是類似的問題)。首先,對於任何未來的操作,數據庫中的所有枚舉應該是單獨的關係結構(例如表)。這樣,使用索引字段創建這些列表將非常簡單。

現在你會打電話給地獄的工作緩慢的字符串操作功能,忘掉指標,這讓你到約100倍慢表演查詢和不太確定的數據。這是錯誤的數據庫設計導致的地方。

用逗號代替分號後,當然可以使用類似find_in_set()的東西,但這是變態。
最好的解決方案是重新設計數據庫,如果需要這種類型的進一步請求。

相關問題