0

user_id と items フィールドを含むテーブルがあります。user_id はユーザーの ID を持つ単なる int であり、項目は「テキスト」フィールド内の xml 構造化オブジェクトです。プレーヤー アイテムに関する統計を表示できるようにしたいです。つまり、あるアイテムを誰が最も多く持っているか、全員の平均資産などです。

現在、各行をループしてから、SimpleXMLElement を再度作成し、それをループして、特定の条件を指定してフィルター処理する必要があります。

構造はこのようなものです: 在庫

たとえば、アイテム ID が 332 のすべてのアイテムをカウントするクエリを実行する場合、このクエリには 3 ~ 4 秒かかります。50k 以上の行 (現在は 28k) があると予想されるため、このプロセスを高速化できる他の方法があれば、それは素晴らしいことです。

4

2 に答える 2

1

のようにmysqlを使用するのはどうですか?

例えば

SELECT * FROM table WHERE inventory like '%<itemid>332</itemid>%';
于 2012-10-27T03:24:01.167 に答える
1

このデータをクエリする必要がある量によっては、XML として保存することが最善の方法ではない場合があります。多くのデータベースは、XML フィールドからデータを抽出するために使用できる何らかの形式の XPath クエリをサポートしています。 MySQL は ExtractValue 関数の形式でいくつかのサポートを提供します。これを使用すると、単純に LIKE を使用するよりも信頼性の高い方法で必要な基準を抽出できます (たとえば、deefactorial の回答では、XML に複数の itemid があった場合はどうなるでしょうか? )。

SO の例は、How to use XPATH in MySQL select? にあります。.

于 2012-10-27T03:34:15.720 に答える