0

Coldfusion8/MySQL 5.0.88カスタム検索統計を追加しようとしている製品検索を使用しています。

私は製品検索のヒットを保持するためのテーブルを持っており、現在それを埋めるための最良かつ最も時間のかからない方法を探しています。

次のようにテーブルにエントリを挿入します。

<cfquery datasource="db">
    INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
    VALUES(   <cfqueryparam value = "#results.sellerID#" cfsqltype="cf_sql_varchar" maxlength="13">
            , <cfqueryparam value = "#results.style#" cfsqltype="cf_sql_varchar" maxlength="35">
            , <cfqueryparam value = "#Session.skin#" cfsqltype="cf_sql_varchar" maxlength="13">
            , "detail"
            , now() 
            )
</cfquery>

単一のレコード(detail)を取得する場合、これを含めるのは簡単ですが、一般的な検索をどのように保存するのか疑問に思っています。

ユーザーが500件の結果を返す検索を行っているとすると、一度に表示するのは24件のみですが、正しい統計を取得するには、ヒットカウンターに500件のエントリを作成する必要があります。

質問:
これを行うための最良の方法は何でしょうか?CFThreadユーザーがページを続けている間、を使用して実行することを考えましたが、データベースに500回アクセスするかどうかさえわかりません。良いアプローチについてのアドバイスは大歓迎です。

ありがとう!

PS:私はこれにGoogleAnalyticsを使いたくありません。

4

1 に答える 1

1

これはあなたが探しているものではないかもしれませんが、もちろんセミコロンを使用してMS-SQLステートメントを連結することができます。

INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
VALUES(   <cfqueryparam value = "#results.sellerID#" cfsqltype="cf_sql_varchar" maxlength="13">
        , <cfqueryparam value = "#results.style#" cfsqltype="cf_sql_varchar" maxlength="35">
        , <cfqueryparam value = "#Session.skin#" cfsqltype="cf_sql_varchar" maxlength="13">
        , "detail"
        , now() 
        );
INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
VALUES(   <cfqueryparam value = "#results.sellerID#" cfsqltype="cf_sql_varchar" maxlength="13">
        , <cfqueryparam value = "#results.style#" cfsqltype="cf_sql_varchar" maxlength="35">
        , <cfqueryparam value = "#Session.skin#" cfsqltype="cf_sql_varchar" maxlength="13">
        , "detail"
        , now() 
        )
INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
VALUES(   <cfqueryparam value = "#results.sellerID#" cfsqltype="cf_sql_varchar" maxlength="13">
        , <cfqueryparam value = "#results.style#" cfsqltype="cf_sql_varchar" maxlength="35">
        , <cfqueryparam value = "#Session.skin#" cfsqltype="cf_sql_varchar" maxlength="13">
        , "detail"
        , now() 
        );

ステートメントをファイルに書き込んで、MySQLにスケジュールに基づいてインポートさせることができる場合があります。したがって、ファイルをログディレクトリに書き込んでから、CFSCHEDULE / CFEXECUTEプロセスを実行して、スケジュールに基づいてファイルを処理することができます。

また、便利なINSERT INTO...SELECTステートメントを試すこともできます。とにかく検索結果がデータベースからのものである場合は、データベースから同じ結果を再構築し、CFからのいくつかの定数を使用して一括挿入するSELECTステートメントを作成できます。

INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
SELECT #reseller_id# as iln, searchtable.article, searchtable.source, 1, #now()#
FROM SearchTable
WHERE [search criteria statements here...]

最後に、ストアドプロシージャを作成して、代わりに一括エントリをSQLサーバーに渡すことができます。

クエリデータを渡すCFThreadも良い考えのように思えますが、忙しいサイトの場合、特にユーザーが常に検索を実行している場合は、生成される可能性のあるスレッドの数に注意することをお勧めします。ご使用のエディションのColdFusionのCFスレッド制限と管理者の設定を確認してください。

これらの一般的なポインタがお役に立てば幸いです。^ _ ^

于 2012-08-26T16:49:40.080 に答える