查询数据库基于标签

时间:2014-07-15 21:23:21

标签: php mysql database

我的表就像这样

 _________________________________
| product_id   | tag_name         |
|--------------|------------------|
|      1       |  tag1,tag2,tag3  |
|      2       |  tag2,tag4,tag6  |
|      3       |  tag1,tag3       |
|      4       |  tag4,tag2,tag1  | 
 ---------------------------------

我想展示产品包含tag3。如何在php中查询数据库?

提前致谢。

我已将表格设计改为此。

     __________________________
    | tag_id       | tag_name  |
    |--------------|-----------|
    |      1       |  tag1     |
    |      2       |  tag2     |
    |      3       |  tag3     |
    |      4       |  tag4     | 
     --------------------------

     __________________________
    | product_id   |  tag_id   |
    |--------------|-----------|
    |      1       |     1     |
    |      2       |     1     |
    |      3       |     2     |
    |      4       |     3     |
    |      5       |     4     |
    |      6       |     3     | 
     --------------------------

我认为这个比第一个更好。是吗?

3 个答案:

答案 0 :(得分:3)

使用FIND_IN_SET()

select * from your_table
where find_in_set('tag3', tag_name) > 0

但实际上你应该考虑改变你的桌面设计。永远不要在一列中存储多个值!

答案 1 :(得分:1)

一个简单但非常模糊的解决方案是:

SELECT * FROM products WHERE tag_name LIKE '%tag3%'

但是,你的表设计错了,你应该有另一个这样的表: product_id tag_name 1个标签1 1个标签2 2 tag1

答案 2 :(得分:1)

您可以使用比使用的@amik更严格的FIND_IN_SET()

SELECT * FROM `products` WHERE FIND_IN_SET('tag3', tag_name)