2013-03-20 2 views
2

글쎄, 주로 데이터베이스의 잘못된 구조로 인해 문제가 발생했습니다. 코드가 매우 복잡하고 테이블이 너무 커서이 구조를 수정하는 옵션이 아닌 것 같은 회사를 위해이 코드를 작성했습니다. 어쨌든 MYSQL like + group

, 내 문제는 내가에 어떻게 든 그룹 문자열에 혼자되지 않습니다 값을 ... 그들은 쉼표로 구분 된 값을 저장하는 ... 시도하고 그래서이 될 것입니다

같은
field: "category" value: 'var1, var2, var3' 

그리고 나는이 쿼리를 사용하여 검색됩니다

SELECT name, category 
FROM companies 
WHERE (MATCH(name, category) AGAINST ('$search' IN BOOLEAN MODE) 
     OR category LIKE '$search%') 

그것은 (그것이 비록 3 개 변수에 국한되지 솔로 이상 많은 수 있습니다) 예를 들어 VAR2에 대한 일치 것을 나는 그것을 수동으로 분할 것 PHP, 문제 없습니다. 내가 충분한 경기를 얻지는 못하지만, 나는 예를 들어. 다른 검색으로 10 일치. 좀 더 구체적으로 말하자면 나는 자동적 인 기능을 만들고 있는데, 이는 예를 들어 "moto %"를 모터 바이크, 모터 단독 또는 다른 것과 일치시키고 싶다. 그러나 나는 같은 값을 얻는다. 결과는 "오토바이"를 포함하고 있으며 나는 그들을 필터링하는 방법을 모르겠다. 왜냐하면 나는 나쁜 DB 구조 때문에 GROUP BY를 사용할 수 없기 때문이다 ...

나는 이것을 발견했다 : T-SQL - GROUP BY with LIKE - is this possible? 그것은 해결책이 될 것입니다. 그러나 제가 시도한 한, 내가 원했던대로 작동시키지 못했습니다. 거기에이 작업 주위에 나는 아마도 DB 구조를 수정해야 할 수도 절대적으로 방법이 없습니다 (그러나 이것은 정말 마지막 옵션이어야합니다)

답변

2

을 경우

그래서 나는 ...이있는 솔루션 궁금하네요 데이터베이스 구조를 적절하게 만드는 단계를 시작하십시오. 여분의 표를 만들고 분할 값으로 채 웁니다.

그런 다음 적절한 쿼리를 사용하여 필요한 데이터를 선택할 수 있습니다. 귀하와 차기 개발자 모두 쿼리 속도 향상을 언급하지 않고 앞으로이 프로젝트에 대한 문제가 줄어들 것입니다.

+0

좋아, 다른 옵션을 찾는 대신 해보겠다. 값을 새로운 DB로 나누는 방법에 대해 제안이 있습니까? 순수 MYSQL 또는 PHP를 사용하여 – Colandus

+0

새 테이블에 내가 의미하는 ... 난 그냥 그것을 검색하거나 아무것도 찾지 못하면 새로운 질문을 만듭니다. – Colandus

+3

새 테이블을 만들고 'SELECT name'(또는 고유 식별자로 사용하기로 선택한 항목)'FROM companies' 쿼리를 실행 한 다음 PHP를 사용하여 category의 내용을 explode()합니다. 이렇게 생성 된 각 카테고리에 대해 foreach 루프를 사용하여 새 테이블에 ID와 카테고리를 삽입하십시오. – starshine531

0

난 내가 코멘트를 쓸 수없는 이유를 잘 모르겠지만, 아마도 당신이 시도 할 수 있습니다 : 카테고리에서 '검색'값 중 하나를 나타나는 경우

SELECT name, category FROM companies WHERE category LIKE '$search%' or LOCATE('search', category)>0; 

보일 것이다 그.

0

데이터베이스를 올바르게 만들어야한다는 데 동의해야합니다. 나중에 많은 문제와 시간을 절약 할 수 있습니다. 그러나 SELECT DISTINCT을 사용하면 즉각적인 문제가 해결 될 수 있습니다.

+0

아니요, 그렇지 않습니다. 내가 그룹화 할 가능성이 가장 높은 그룹화 할 수있는 필드를 그룹화해야한다고 말했기 때문에 전혀 다른 점이 없습니다 ... 값은 결코 동일하지 않습니다. – Colandus