2013-10-29 43 views
0

我可以使用like CONCAT嗎?否則,我找不到任何地方。我想下面並給出了一個錯誤:因爲bookingType場基本上是逗號分隔的數字如列表我使用CONCAT用逗號:使用喜歡CONCAT

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

注意40,14,45 - 我不能只搜索例如4,因爲它會顯示什麼時候不應該 - 有更好的方法在該領域內進行搜索?

+0

LIKE的設計不像IN –

回答

3

通常最好不要存放逗號在現場分隔值,但你可以使用CONCAT這種方式是:

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

第一個選項完美,非常感謝...輕微的錯誤代碼應該是:... LIKE CONCAT('%'...在% –

+0

之後刪除逗號@DarrenSweeney我修正了第一個查詢,如果我沒有正確地打開它,那麼最好在bookingType上使用concat,所以where子句將會是' ',40,14,45,'LIKE'%,4,%'',它會匹配bookingTypes_id,即使它在字符串的開始或結尾 – fthiella

+0

是的,我同意但我在整個過程中發現缺陷我想,並且想知道我是否應該爲act:bookingType關係分配一個獨立表格 - 當我使用implode添加第一個和最後一個沒有前導或尾隨逗號時,這個查詢就會失效 –

2

試試這個: -

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