2017-09-26 9 views
0

私は3つのテーブルを持っています。ここで ユーザー(ID、名前) 項目(ID、名前、価格)と 注文(ID、USER_ID、ITEM_ID)mysqlのコンマ区切り値を比較するには?

は私のITEM_ID列はカンマが[1,2,3]のような値を隔てています。 item_idが単一の値を持つ場合、私は完全に動作する以下のクエリを持っています。

select users.name,items.price 
from orders 
join users 
on user.id = orders.user_id 
join items 
on items.id = orders.item_id 
where orders.id = 1 

カンマ区切りの値がある場合、上記のクエリと同じ結果をどのように得ることができますか?ただし、カンマ区切りで店idが悪いDB設計の一種である

select users.name,items.price 
from orders 
join users 
on user.id = orders.user_id 
join items 
on find_in_set(items.id, orders.item_id) 
where orders.id = 1 

は、あなたがより良い関係を格納するテーブルを追加したい:

答えて

1

find_in_set機能を試してみて使用することができますordersおよびitems。その後、クエリ

create table order_item (
    order_id varchar(20), 
    item_id varchar(20) 
); 

select users.name,items.price 
from orders 
join users 
on user.id = orders.user_id 
join order_item oi on oi.order_id = orders.id 
join items on oi.item_id = items.id 
where orders.id = 1 
group by orders.id 

EDIT

だけ例を取る含ま[]

を、あなたはこれを試すことができます。

select users.name,items.price 
from orders 
join users 
on user.id = orders.user_id 
join items 
on find_in_set(items.id, replace(replace(orders.item_id, '[', ''), ']', '')) 
where orders.id = 1 
+0

より良いデザインをお勧めします。私はID配列全体を格納しています。 – Hitendra

+0

より良いデザインをお寄せいただきありがとうございます。私はfind_in_setでクエリを試しましたが、何の結果も得られませんでした。私は後であなたの提案を実装するが、今私は今持っているものから結果を得たい。 – Hitendra

+0

私のdbフィールドには値「[1,2,3]」があり、それには大括弧が両方とも入っていることに注意してください。 – Hitendra

関連する問題