2017-09-26 1 views
0

J'ai 3 tables. utilisateurs (id, nom) éléments (id, nom, prix) et commandes (id, user_id, item_id)Comment comparer les valeurs séparées par des virgules dans mysql?

Voici ma colonne item_id a des valeurs séparées par des virgules comme [1,2,3]. J'ai ci-dessous la requête qui fonctionne parfaitement si item_id a une valeur unique. Est-ce que quelqu'un peut me suggérer comment obtenir le même résultat que dans la requête ci-dessus quand il y a des valeurs séparées par des virgules?

Répondre

1

Essayez find_in_set Fonction:

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 

Cependant, le magasin id avec séparées par des virgules est une sorte de mauvaise conception db, vous feriez mieux d'ajouter une table pour stocker la relation entre orders et items.

Il suffit de prendre un exemple:

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

alors la requête:

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:

Avec [] inclus, vous pouvez essayer ceci:

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

S'il vous plaît suggérer un meilleur design. Je stocke tout le tableau d'id. – Hitendra

+0

Merci d'avoir suggéré un meilleur design. J'ai essayé la requête avec find_in_set mais n'ai obtenu aucun résultat. Je vais mettre en œuvre votre suggestion plus tard, mais maintenant je veux obtenir le résultat de ce que j'ai maintenant. – Hitendra

+0

Mon champ db a la valeur "[1,2,3]", notez qu'il a les deux crochets. – Hitendra