2013-10-29 3 views
0

CONCAT과 같이 사용할 수 있습니까? 그렇지 않으면 어디에서나 찾을 수 없습니다. 나는 시도하고 다음과 같은 에러 제공하고있어 다음 bookingType 필드가 쉼표로 구분 된 숫자, 예를 들어 목록은 기본적으로 있기 때문에 나는 쉼표로 CONCAT을 사용하고 있습니다 :LIKE with CONCAT 사용

SELECT *, (select count(*) from acts where bookingType like '%CONCAT(bookingTypes_id, ',')%') as how_many FROM bookingTypes order by bookingType 

주 40,14,45 - 예를 들어 검색 할 수 없습니다. 4는 그럴 필요가 없다는 것을 보여줄 것입니다 - 그 분야에서 검색하는 더 좋은 방법이 있습니까?

SELECT 
    *, 
    (SELECT COUNT(*) 
    FROM acts 
    WHERE CONCAT(',', bookingType, ',') 
      LIKE CONCAT('%,', bookingTypes_id, ',%')) AS how_many 
FROM bookingTypes 
ORDER BY bookingType 

또는 사용할 수 FIND_IN_SET :

SELECT 
    *, 
    (SELECT COUNT(*) 
    FROM acts 
    WHERE FIND_IN_SET(bookingTypes_id, bookingType)>0) AS how_many 
FROM bookingTypes 
ORDER BY bookingType 
+0

등심은 IN –

답변

3

그것은 일반적으로 더 나은 쉼표 저장 필드에 값을 분리,하지만 당신은 CONCAT이 방법을 사용할 수 있습니다하지 않는 것입니다 -

SELECT * 
FROM acts 
WHERE bookingTypes LIKE CONCAT('%', 
(SELECT bookingTypes FROM bookingTypes order by bookingType LIMIT 1), '%'); 
+0

첫 번째 옵션처럼 작동하도록 설계되지 않았습니다. 많은 감사 ... 약간의 오류가 있습니다. 코드는 다음과 같아야합니다. ... LIKE CONCAT ('%'... 쉼표를 % –

+0

뒤에 둡니다. @DarrenSweeney 첫 번째 쿼리를 수정했습니다. 올바르게 이해할 수없는 경우에는 예약 유형에서도 concat을 사용하는 것이 더 좋으므로 where 절은 ' ', 40,14,45,'LIKE '%, 4, %''문자열의 시작 부분이나 끝 부분에 있더라도 bookingTypes_id와 일치합니다. – fthiella

+0

그래, 그렇지만이 전체 과정에서 결함을 발견하고 있습니다. 내가 생각하기에, 그리고 행동을위한 별도의 테이블을 가져야하는지 궁금해한다 : 각자 자신의 라인에 예약 타입 관계가있다. - implode를 사용하여 추가 할 때 앞뒤에 쉼표가 없다. –