2011-12-02 12 views
-1

テーブルがあります:tbl_offer(offer_name、location)特定のオファーについては、場所の列に複数の場所があり、コンマで区切ります。Mysqlデータを取得しています

例:

オファーがoffer1であれば、私は場所の欄のBangalore, Mumbai, Chennaiを持っています。

ここでは、それぞれの場所を個別に取得するクエリを作成します(特定のオファーの場合はコンマで区切ります)。 offer1を選択して別のレコードにBangalore Mumbai and Chennaiを取り込む必要があります。

+5

になります。それ以外の場合、同じことについての何千もの結果については[こちらを検索](http://stackoverflow.com/search?q=mysql+split+column) – Cylindric

+0

ええ。私は考えを得た。たくさんありがとう。 – bid

答えて

1

@Cylindricがあなたに言ったように、データベース設計を変更することができます!
2つのテーブルを作成します.1つはオファー用、もう1つはロケーション用です。

OFFERS (id, name) 
LOCATIONS (offer_id, name) 

だから、(例えば)あなたが提供してい(1, 'offer1')や場所に
(1, 'Bangalore'), (1, 'Mumbai') and (1, 'Chennai')を持っています。

あなたのクエリが容易になります。

SELECT o.name, l.name FROM offers o 
INNER JOIN locations l ON o.id = l.offer_id 

正直言って、あなたは場所の繰り返しを避けるために3つのテーブルが必要です。

OFFERS  (id, name) 
LOCATIONS (id, name) 
OFFERS_LOC (offer_id, loc_id) 

をあなたが提供してい
(1, 'offer1')を持って、
LOCATIONSの (1, 'Bangalore'), (2, 'Mumbai') and (3, 'Chennai')および
OFFERS_LOC内の(1, 1), (1, 2) and (1, 3)

あなたはまだあなたがフィールドにカンマ区切りのリストを格納していないように*今*それを変更し、このアプリを開発している場合あなたのクエリが

SELECT o.name, l.name FROM offers o 
INNER JOIN offers_loc ol ON o.id = ol.offer_id 
INNER JOIN locations l ON ol.loc_id = l.id 
+0

あなたの提案に感謝しているMcrco。 – bid