2010-03-18 3 views
1

VARCHAR 필드의 값을 비교하는 데 문제가 있습니다.MySQL 쿼리의 문자열 비교 값

제품이있는 테이블이 있으며 각 제품에 볼륨이 있습니다. 나는 VARCHAR 필드에 볼륨을 저장하고 보통 숫자 (30, 40, 200 ..)이지만 볼륨이 여러 개인 제품은 30,60,80처럼 세미콜론으로 구분하여 저장됩니다.

나는 여러 권을 저축하는 것이 좋지 않다고 생각하지만 나는 그 것처럼 작동해야한다.

제품의 볼륨 기능별 검색을 구현하려고합니다. 또한 검색된 제품보다 더 크거나 같은 볼륨을 가진 제품을 표시하려고합니다. 단일 볼륨이있는 제품에는 문제가되지 않지만 다중 볼륨 제품에는 문제가 있습니다.

아마도 예를 들어 명확하게 알 수 있습니다. 볼륨 필드에 제품 번호가 30, 40, 70, 80 인 경우를 가정 해 봅시다. 누군가가 볼륨을 검색 한 경우 50이라고 말하면 해당 제품을 표시하고 싶습니다.

이렇게하려면 내 자신의 사용자 지정 MySQL 함수를 작성하려고했습니다 (전에는 본 적이 없지만). 다른 솔루션을 제공 할 수 있습니다.

나는 가난한 영어에 대해 사과하지만 나는 나의 질문을 분명히하기를 희망한다.

감사합니다.

+0

필드의 인덱스를 사용할 수 없으므로 테이블이 매우 큰 경우이 쿼리에서 성능이 저하 될 것입니다. – JohnFx

+0

볼륨은 항상 왼쪽에서 오른쪽 순서대로 저장됩니까? –

+0

JohnFx, 우리는 캐시를 사용하여 성능을 향상시킬 수 있기를 기대합니다. 마크 바이어스, 솔직히 말하면, 나는 내일 누군가와 그것을 확인해야 할 것입니다. – b2238488

답변

1

최대 값과 비교하면됩니다. 볼륨은 항상 왼쪽에서 오른쪽 순서대로 저장됩니까? 그렇다면 마지막 세미콜론 다음에 오는 값과 비교하십시오. SUBSTRING_INDEX을 사용하여 마지막 값을 선택할 수 있습니다.

SELECT * 
FROM products 
WHERE CAST(SUBSTRING_INDEX(volume, ';', -1) AS UNSIGNED) >= 50 
+0

당신의 대답은 실현 가능해 보입니다. 볼륨 순서에 관해서는 지금 당장은 확실하지 않지만 오름차순을 존중한다고 생각합니다. – b2238488

+0

> 볼륨은 항상 왼쪽에서 오른쪽 순서로 저장됩니까? 예. – b2238488