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在用户继续浏览页面时使用 a 来运行,但我什至不确定是否要对数据库进行 500 次访问。欢迎任何关于好的方法的指示。

谢谢!

PS:我不想为此使用 Google Analytics。

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 语句。如果您的搜索结果无论如何都来自数据库,您可以设计一个 SELECT 语句,从数据库中重建相同的结果并使用 CF 中的一些常量批量插入它。

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 回答