2010-07-15 72 views
0

你好我嘗試使用SQL MySQL中的一些值進行排序,這就是我:SQL語句建設

選擇從我的表中的列標籤,其中在列的狀態值等於網上行和值等於博物館,按名稱和升序排列。

SELECT * 
    FROM tech 
WHERE `STATUS` = 'online' 
    AND `TAGS` = 'museum' 
ORDER BY NAME ASC 

但是我需要的是這樣的:

選擇從我的表,其中在列的狀態值等於網上並且在列標籤,等於博物館這個值的行,按名稱責令其並按升序排列。

我的意思是,現在在我的數據庫中,我的列標籤每行只有一個值,對於使用標籤不是很有用。我想改變它,這樣它的值將代替「博物館」變成「博物館3D編程」,並且SQL檢查該字符串值中的特定「單詞」。

可以這樣做嗎?

+0

全文搜索( FTS)比LIKE更快速,更有能力進行文本搜索/匹配。 – 2010-07-15 22:16:08

回答

4

嘗試

SELECT * 
    FROM tech 
WHERE `STATUS` = 'online' 
    AND `TAGS` like '%museum%' 
ORDER BY NAME ASC 
+0

Rigth現場感謝;) – Marvin 2010-07-15 21:56:13

1

聽起來像是你要使用LIKE

SELECT * 
    FROM tech 
    WHERE `STATUS` = 'online' 
     AND `TAGS` LIKE '%museum%' 
    ORDER BY NAME ASC 
+0

謝謝,就是這樣! – Marvin 2010-07-15 21:57:40

+0

@Marvin一定要標記這個答案,如果它適合你。 – ahsteele 2010-07-15 22:01:48

+0

我只能標出一個正確的答案,即時通訊,我投了票,但海梅先回答。 – Marvin 2010-07-15 22:13:02

1

您只需要使用LIKE%。見this site

因此,像這樣

..AND `TAGS` like '%museum%'... 
1

`試試這個:

SELECT * 
    FROM Tech 
WHERE `STATUS` = 'online' 
    AND `TAGS` LIKE '%Museum%' 
ORDER BY Name ASC 
1

而非單個列創建多個標籤,你應該考慮拆分標籤關閉到另一個表。這就是所謂的database normalization。它將使您的數據更容易處理,並且可以避免執行LIKE搜索,這可能非常緩慢。

不久前,我回答了一個非常類似的問題,並且包含一個示例表結構,一些數據和一些示例查詢。給出的例子有三個表格:item,item_tagtagitem包含,以及項目,和tag包含標籤。 item_tagjunction table。它有助於在另外兩個表格之間創建多對多的關係:每個項目可以關聯多個標籤,並且每個標籤可能與多個項目關聯。結合表位於兩者之間,幷包含項目標籤對的列表:

Will this (normalised) database structure permit me to search by tags as I intend?

你也應該看看這個MySQL的教程:

An Introduction to Database Normalization

+0

謝謝你這聽起來應該真的研究。我聽到了這個詞,但還沒有真正查看它。 – Marvin 2010-07-15 22:11:25