0

I'm building a simple shopping cart. I need to allow for related products. My initial thought was to have a db field in the product table called tags which will have a comma delimited list of tags in it:

tag1,tag2,tag3

When I grab the product from the db I could also grab the tags and explode the string on the comma.

Problem is i'm having trouble thinking of a good way to then call to the db for all other products that have a matching tag. Is there way to search a string in SQL?

can anyone think of a good way to achieve this

4

4 回答 4

2

您可以FIND_IN_SET()为此目的使用:

SELECT * FROM tableName WHERE FIND_IN_SET('tag1', tags) > 0

但是,我强烈建议改为阅读数据库规范化和连接。

不要使用任何提及LIKE语法的答案。例如WHERE tags LIKE %tag1%会匹配tag1但也是tag12错误的。

于 2013-05-18T12:05:56.930 回答
0

考虑使用 MySQLLIKE子句(查看本指南:http ://www.tutorialspoint.com/mysql/mysql-like-clause.htm )。您可以在每个标签上使用它,如下所示:

SELECT * FROM `product` WHERE `tags` LIKE '%tag1%' OR `tags` LIKE '%tag2%' OR `tags` lIKE '%tag3'
于 2013-05-18T12:05:49.097 回答
0

要在 SQL 中搜索字符串,您可以使用LIKE运算符。这是一个例子:

mysql_query("SELECT * FROM table_name WHERE value LIKE '%str%' ");
于 2013-05-18T12:00:28.783 回答
0

我不会走在字段中存储逗号分隔字符串的路线,它的可扩展性(或规范化)不是很好。我会把它分成3个不同的表:

产品:
-------------
编号 | 姓名
-------------

1 | 产品1
2 | 产品 2


标签:
---------------
编号 | 标签
---------------

1 | 标签 1
2 | 标签 2


产品标签:
----------------------
产品编号 | tag_id
----------------------
1 | 1
1 | 2

当您想查找带有相关标签的产品时,您只需这样做

    从 product_tags 中选择 product_id,其中 tag_id = TAG_ID

然后,您可以使用更高级的连接语句从产品表中返回记录(而不仅仅是标签表中的 product_id):

    选择产品。*来自产品
    INNER JOIN product_tags ON product_tags.product_id = products.id
    WHERE product_tags.tag_id = TAG_ID

它需要做更多的工作,但它会在未来为您省去头疼的问题。

于 2013-05-18T12:26:58.467 回答