在SQL中搜索字符串

时间:2013-05-18 11:58:20

标签: php mysql

我正在建造一个简单的购物车。我需要允许相关产品。我最初的想法是在产品表中有一个名为tags的db字段,其中包含逗号分隔的标签列表:

tag1,tag2,tag3

当我从数据库中获取产品时,我也可以抓取标签并在逗号上爆炸字符串。

问题是我无法想出一种好方法,然后为具有匹配标记的所有其他产品调用db。有没有办法在SQL中搜索字符串?

任何人都可以想到实现这个目标的好方法

4 个答案:

答案 0 :(得分:2)

您可以将FIND_IN_SET()用于此目的:

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

但是,我强烈建议您阅读数据库规范化并加入。

Pleaso 使用提及LIKE语法的任何答案。例如,WHERE tags LIKE %tag1%会匹配tag1,但tag12也会匹配。

答案 1 :(得分:0)

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

mysql_query("SELECT * FROM table_name WHERE value LIKE '%str%' ");

答案 2 :(得分:0)

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

SELECT * FROM `product` WHERE `tags` LIKE '%tag1%' OR `tags` LIKE '%tag2%' OR `tags` lIKE '%tag3'

答案 3 :(得分:0)

我不会在字段中存储逗号分隔字符串的路径,它不是很可扩展(或normalized)。我会把它分成3个不同的表:

products:
-------------
id | name
-------------

1  | product 1
2  | product 2


tags:
---------------
id | tag
---------------

1  | tag 1
2  | tag 2


product_tags:
----------------------
product_id | tag_id
----------------------
1          | 1
1          | 2

如果您想查找带有相关标签的产品,您只需


    SELECT product_id FROM product_tags WHERE tag_id = TAG_ID

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


    SELECT products.* FROM products 
    INNER JOIN product_tags ON product_tags.product_id = products.id
    WHERE product_tags.tag_id = TAG_ID

它的工作量稍微多一点,但将来会让你头疼。