2017-09-26 23 views
0

我有3張桌子。 用戶(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 

任何人都可以建議我當逗號分隔值時,我怎麼能得到與上述查詢相同的結果?

回答

1

嘗試find_in_set功能:

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 

然而,店id用逗號分開是一種不好的分貝設計,你最好添加一個表來存儲之間的關係ordersitems

只是舉個例子:

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 

編輯

隨着[]包括在內,你可以試試這個:

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