如何搜索序列化内容

时间:2012-08-13 12:54:04

标签: php mysql serialization

我有两张桌子

表1是:

id | item_id
---------------
1  | a:2:{i:0;s:1:"1";i:1;s:1:"2";}

,第二个表是:

tag_id | tag
------------
1      | c
2      | java

序列化后,我在表1中存储了表2的id。现在我想通过mysql %like%搜索表1中的标签,但问题是,如果我想在item_id中搜索标签的id为1或2,即使没有存储1,也总能找到结果由我,但这是由序列化功能存储。现在我想知道我该怎么办?任何更好的方法/方法也将受到赞赏!

1 个答案:

答案 0 :(得分:5)

序列化数据不适合搜索。

最好改进表格结构:

  1. 表格标签与您的相同。
  2. 表items_tags结构:
    1. id - autoincrement field
    2. item_id - 带标记的项目ID
    3. tag_id - 标记ID
  3. 使用以下结构,可以更轻松地搜索带有标签的项目。

    <强>加

    Mayankswami,示例查询:对于具有指定标记的所有项目:SELECT item_id FROM items_tags WHERE tag_id=(TAG_ID)对于项目标记:SELECT * FROM item_tags AS IT LEFT JOIN tags AS T ON T.id=IT.tag_id WHERE item_id=(ITEM_ID)