2014-04-07 2 views
0

제목에서 설명하기가 어렵 기 때문에 여기서 최선을 다할 것입니다. 기본적으로 내가 좋아하는 행을 포함하는 MySQL의 제품 테이블에서 열이 :같은 문자로 시작하는 모든 열의 배열을 가져옵니다.

FEL10 
FEL20 
FEL30 
PRO05 
PRO07 
PRO08 
VAI12 
VAI13 
VAI14 

이이 범주 ("FEL", "PRO", "VAI") 내 제품의 식별 번호 ("10"입니다 , "20"등). 내가 나에게 같은 텍스트 배열을 생성하는 SQL 선택 쿼리 필요 : 나는 목록 상자를 만들 필요가이 배열로

FEL* 
PRO* 
VAI* 

을, 그 날 (관계없이 식별 번호) 범주를 선택할 수 있습니다. 카테고리를 선택하면 PRO *라고 말하며 역 동작을해야합니다. PRO05, PRO07 및 PRO08과 관련된 모든 제품 정보를 인쇄하십시오.

어떻게 생각하십니까? DISTINCT 문을 사용하려고 시도했지만 첫 번째 문자 만 필터링해야합니다. 그렇지 않으면 쓸모가 없습니다. 또한 SUBSTRING() 및 LEFT() 함수를 시도했지만 작동하지 않는 것처럼 보입니다 (SQL 구문 오류가 발생 함).

- resque에 당신의 도움이 항상

+0

SQL 구문 오류 * [** this fiddle **] (http://sqlfiddle.com/#!2/21734/1)에 대한 자세한 내용 게시 및 게시 방법을 보여 줄 수 있습니까? –

답변

1

MySQL을 LIKE에 대한 감사 :

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

어떻게 대답하나요? 3 글자 코드 목록을 얻는 방법을 보여주지는 않습니다. 그리고 한 가지 카테고리의 제품을 선택하는 방법을 보여줍니다. 여기서 질문은 실제로 * one 카테고리의 제품을 선택하는 방법이었습니다. –

2

은 어떤 문제가 있습니까?

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

아마 거기에는 전혀 문제가 없지만 카테고리 이름의 길이가 3과 다를 수 있습니다 (질문에서 명시 적으로 언급되지 않은 :) :) – DrCopyPaste

+0

정확하지 않은 경우 죄송합니다. 문제는 점점 더 어려워지고 있습니다. 나는 tought! – wiredmark

+0

그런 경우 카테고리 코드를 제품 ID의 나머지 부분과 정확히 구분하는 방법을 지정해야합니다. 그렇지 않으면 우리의 모든 추측이 실패 할 것입니다 ... – vogomatix

1

3 문자 코드의 목록을 가져가 사용

사용자가 값 중 하나가 일치하는 모든 항목을 가져이 사용 선택
select distinct left(combicode, 3) 
from mytable; 

(

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

을 그 외에도 하나의 열에 값을 연결하는 것은 좋지 않습니다. 범주에 대해 하나의 열을, 제품 코드에 대해 하나의 열을 사용하지 않는 이유는 무엇입니까? 전혀 문제가되지 않습니다.)

관련 문제