2014-04-07 57 views
0

這很難在標題中解釋,所以我會盡我所能。基本上,我在包含像行的MySQL的產品表中有一欄:獲取以相同字符開頭的所有列的數組。

FEL10 
FEL20 
FEL30 
PRO05 
PRO07 
PRO08 
VAI12 
VAI13 
VAI14 

這些類別(「FEL」,「PRO」,「奧鋼聯」)和我的產品的識別號碼(「10」 ,「20」等)。我需要創建我的文本陣列像SQL SELECT查詢:

FEL* 
PRO* 
VAI* 

隨着這陣我需要創建一個列表框,這讓我選擇一個類別(無論識別號碼)。一旦我選擇了一個類別,比如說PRO *,我需要做相反的操作:打印所有與PRO05,PRO07和PRO08相關的產品信息。

你認爲你能做到這一點?我一直在嘗試使用DISTINCT語句,但我只需要過濾第一個字符,否則它將無用。我也嘗試了SUBSTRING()和LEFT()函數,但它們似乎沒有工作(我得到一個SQL語法錯誤)。

- 感謝您的幫助一如既往

+0

你能說明你是如何嘗試和發佈詳細信息*我得到一個SQL語法錯誤* [**這個小提琴**](http://sqlfiddle.com/#!2/21734/1)顯示沒有錯誤 –

回答

1

的MySQL LIKE到resque:

SELECT col1 FROM table1 WHERE col1 LIKE 'FEL%'; 

這種方式,你必須添加使用OR所有情況。

替代 - REGEXP

SELECT col1 FROM table1 WHERE col1 REGEXP '(FEL|PRO|VAI).*' 

然後,它只是一個寫適當的正則表達式的問題。

我會使用額外的col來分組你的項目 - 以避免這樣的選擇(對於較大的數據集應該是相當昂貴的)。

https://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp

+0

謝謝,但這個解決方案只會給我特定的結果。我必須假設我不會知道所有的類別代碼,我需要一個通用的解決方案。 – wiredmark

+0

我會看看這個,現在感謝:) – wiredmark

+0

這是如何回答這個問題?它沒有顯示如何獲得三字母代碼的列表。它展示瞭如何一次性選擇*各種*類別的產品,其中問題實際上是如何選擇* one *類別的產品。 –

2

有什麼不對?

SELECT distinct left(col, 3) as category FROM `table1` 
+0

大概沒有什麼不對的地方,但也許類別名稱可以有不同的長度3(這是沒有明確提到的問題:)) – DrCopyPaste

+0

確切地說,對不起,沒有指定的:)事情要比我努力了! – wiredmark

+0

在這種情況下,您必須明確指定如何將類別代碼與產品ID的其餘部分分開,否則我們所有的猜測都可能會失敗。 – vogomatix

1

爲了得到3字母代碼的列表中使用:

select distinct left(combicode, 3) 
from mytable; 

當用戶選擇其中一個值使用此來獲取所有匹配的條目:

select * 
from mytable 
where combicode like concat(@category, '%'); 

(除此之外:在一列中串聯值是一個不好的主意,爲什麼不在一個列中分類,另一個是產品代碼?那麼根本沒有問題。)

相關問題