1

私は2つのテーブルを持っています

表 1 は次のとおりです。

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

2番目の表は次のとおりです。

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

シリアル化した後、テーブル 2 の ID をテーブル 1 に保存しました。今、mysql でテーブル 1 のタグを検索したいのです%like%が、問題は、item_id に ID 1 または 2 があるタグを検索したい場合、私が保存した 1 がない場合でも常に結果が見つかることですが、これはserialize 関数によって保存されます。今、私は何をすべきか知りたいですか?そして、より良いアプローチ/方法も高く評価されます!

4

1 に答える 1

5

シリアル化されたデータは検索には適していません。

テーブル構造を改善することをお勧めします。

  1. テーブルタグはあなたのものと同じです。
  2. 構造を持つテーブル items_tags:
    1. id - 自動インクリメント フィールド
    2. item_id - タグ付きアイテムの ID
    3. tag_id - タグ ID

次の構造を使用すると、タグを使用してアイテムを検索する方がはるかに簡単です。

追加した

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)

于 2012-08-13T12:57:55.970 に答える