2013-11-27 113 views
1

我有一個MySQL表像這樣MySQL查詢使用正則表達式

restaurant_id restaurant_name  restaurant_serving_cuisines 
1    Vasantha Bhavan  4,5,6 
3    Little India  7,5,6 
5    Mohan Restaurants 16,2,4,1,5,3,6 
6    Sri Restaurant  34,16,21,2,23,38,30,7,25,9 
13    The Taco Shop  5 
22    KFC     15 
37    belargio   14,15,16,2,7,4,1,5,17,12,3,13,6 
56    Pizza Hot   5 

我需要這與5 我需要得到餐廳,belargio服務於美食ID餐廳。

我寫查詢

SELECT restaurant_id, restaurant_name,restaurant_serving_cuisines 
FROM `rt_restaurant` 
WHERE restaurant_serving_cuisines REGEXP concat_ws("|", "5", "15"); 

,但我不能得到確切的結果。

+4

如果你有一個包含逗號列 - 你應該檢查你的數據模型的東西。 restaurant_serving_cuisines應該去一個單獨的表,並且根本不需要正則表達式。 –

+0

regexp可能是矯枉過正。查看'LIKE'函數或'FIND_IN_SET'。 (除了矯枉過正之外,你的例子中的逗號分隔值不是按照指定的順序排列的,你至少需要保證正則表達式的工作順序) – AgRizzo

+0

你好,我強烈建議你'NORMALIZE' restaurant_serving_cuisines列。正常化可以幫助你,當你做COUNT,MAX,MIN,SORT,插入新的美食,更新,刪除等... –

回答

1

如何使用FIND_IN_SET

SELECT restaurant_id, restaurant_name,restaurant_serving_cuisines 
FROM `rt_restaurant` 
WHERE find_in_set(5, restaurant_serving_cuisines) > 0 
and find_in_set(15, restaurant_serving_cuisines) > 0 
+0

是的,非常droll – Strawberry

+0

它的工作很好。謝謝。 – mikejohnvino

+0

偉大的解決方案。非常有用。感謝名單 –

0

FIND_IN_SET是好的,但太具體。

這應該對任何DBMS的工作:

SELECT restaurant_id, restaurant_name, restaurant_serving_cuisines 
FROM `rt_restaurant` 
WHERE ',' + restaurant_serving_cuisines + ',' LIKE '%,5,%' 
    AND ',' + restaurant_serving_cuisines + ',' LIKE '%,15,%' 

無論如何,你應該檢查你的數據模型,已經建議:
restaurant_serving_cuisines應該去一個單獨的表