这种用简单的通过关键词(keyword)查找实现的相关文章的方法有很大的不一样,请高手给出一个高效的方案

解决方案 »

  1.   

    前两个是使用数据库,后一个使用cookie
      

  2.   

    cookies + 操作记录.操作记比较简单的方法是在详细页面中记录,可以先记录下从哪个来的.
      

  3.   

    "购买本书的顾客还买过"的一个实现方法,但不一定是最好的:建议个表,三个字段: bookid1,bookid2,购买次数
    某人买了A,B两本书,则在此表中写入:
    A,B,1
    B,A,1
    另一个人也买了这两本,则数据库中变为
    A,B,2
    B,A,2
    第三个人买了A,B,C三本书,则数据库变为:
    A,B,3
    B,A,3
    A,C,1
    B,C,1
    C,A,1
    C,B,1
    查购买A书的顾客还买过: select bookid2 from table where bookid1='A' order by 购买次数
    得出 B(3次) C(1次)
      

  4.   

    楼上的个人认为不怎么好,当一个人以前曾购了十本书时,当他在购买第十一本尽书后,在更新库时,不要一次性的插入十条件记录:
    newbookid,buyedbookid1,id
    newbookid,buyedbookid2,id
    newbookid,buyedbookid3,id
    newbookid,buyedbookid4,id
    newbookid,buyedbookid5,id
    newbookid,buyedbookid6,id
    newbookid,buyedbookid7,id
    newbookid,buyedbookid8,id
    newbookid,buyedbookid9,id
    newbookid,buyedbookid10,id
    楼上的库在查询"购买本书的顾客还买过那些书时"比较方便,但入库时比较麻烦,我的想法是:建一个表
    id 编号
    bid 购买图书的id
    cid 顾客的id
    当某人购买某本书时,只需把(id,bid,cid)入库,
    查询"购买本书的顾客还买过那些书时"要分二步:
    第一步查出购买此书的顾客放入一个临时表:select cid from table where bid="34"
    第二步查出临时表中顾客还购买了那些书:
    select bid from table where cid in (select cid from table where bid="34");这两种方法在大数据量的条件时,百万级那一种效率更高一些,请有经验的高手指点
      

  5.   

    首先,楼主的sql语句要修改一下:
    select distinct cid   from   table   where   bid="34"
    因为有个顾客可能先后买两本一样的书,所以去掉重复的第二步也要修改一下:
    select bid,count(*) as cnt   from   table   where   cid   in   (select  distinct  cid   from   table   where   bid="34") and bid<>'34' group by bid order by cnt desc; 这样写有三个目的:
    1.去掉bid=34的书本身(bid<>'34')
    2.bid会有重复的,所以要以bid分组,因为要得到购买次数,所以也要以bid分组(group by bid)
    3.应该能够知道哪些书和bid=34的这本书的相关程度高,所以需要以购买次数进行排序,所以要用count(*)得到购买次数这个查询变得非常复杂,因为有in,导致索引失效,数据库要进行全表查询,对于大数据量的表格来说是不可能完成的任务我上面提到的方法有如下优势:
    1.不需要进行实时的同步插入修改操作,可以在后台设置一个程序,每天根据当天的购买记录定时统计
    2.完全通过主键查询,查询速度非常快(这点对于前台需要及时呈现的内容来说是非常重要的)希望还有更好的方法
      

  6.   

    iamwh ,感谢你回答我的问题,你提供的方法在查询速度上会大幅提高,但是在入库时的数据量是不可想象的,假如一个网站一天的访问一天是3万个独立IP,每个IP购买十本书,那么每天的新记录量是:
    30000*1*2*3*4*5*6*7*8*9*10  结果是不可想象,有没有更好的办法解决.
      

  7.   

    如果我设计,我会做一张书的关联表,字段是book1, book2
    假设A买了3本书b1,b2,b3,表里的记录就是:
    b1 b2
    b2 b3
    b3 b1
    如果B买了2本书b2,b4,表里就会加一条记录
    b2 b4
    这样,只要写很简单的查询就可以知道书的关联情况了
      

  8.   

    如果我设计,我会做一张书的关联表,字段是book1,   book2
    假设A买了3本书b1,b2,b3,表里的记录就是:
    b1   b2
    b2   b3
    b3   b1
    如果B买了2本书b2,b4,表里就会加一条记录
    b2   b4
    这样,只要写很简单的查询就可以知道书的关联情况了 
    跟前几楼说的方法不一样,不要把买书的id记进去,这样记录数太大
    只要记书的id就行,重复的记录数据库会去掉的
    在book1列上做上索引,查询很快的
    只是入库的时候要计算一下组合, 用程序做也不麻烦 :)
      

  9.   

    可以在书的后面加一个字段就可以了。可以为TEXT记录什么的。只要有人买了这个书那就给这个字段里面加入他的用户名。多个用','分开。这样在打开这个书的时候就可以得到这了个字段里面的内容。用explode(',',字段名);就可以得到一个数组了。把这个一维数组一foreach那不就出来了。
      

  10.   

    用户最近浏览过的。这个问题可以在用户的数据库里面加一段嘛!和上面是同理的。把书名或ID给加到字段里面如果因为书名要去查数据库的话。那可以用这样的方法来加"好书|12,好书呀|13";前面是书名|后是id  ','分隔的是两条的数据一样是explode(',',数据库的字段)先得到一个一维的数组然后FOREACH的时候呢!再explode('|',$**[0])这样又可以得到这个里面以'|'分开的一个数组。就可以把书名和ID名给分开了。显示的时候就可以用书名来显示了。ID做为链接里面用的。当然用COOKIE也是一个办法。可是到了别的电脑上。用户再登陆的话。就没有了这些记录了。所以我个人认为最好的办法就是把他给写入到数据库里面。以上的三贴就可以解决你的问题。只要加入字段。不用去加别的。也不用去做别的表。做别的表的话。那查询的话。就累了。特别是记录多了的话。那网页的速度就慢下来了。
      

  11.   

    你看看asp.net 2.0电子商务开发实战 就知道了  里面有这个~
      

  12.   

    你看看asp.net 2.0电子商务开发实战 就知道了  里面有这个~
      

  13.   

    你看看asp.net 2.0电子商务开发实战 就知道了  里面有这个~