主题:【求助】实现送花功能的SQL语法求助,回复者花 -- 卷心菜
最近想给某个论坛实现类似河里送花的功能,遇上一个难题。
先简单地说一下论坛资料库结构:
ipf_posts---记录所有post的表格(所有主题帖与回复帖的具体发言、状态,包括所属的主题id,发言时间,发言者名称和id等等)。
ibf_topics---记录所有topic的表格(主题id、名称、发表时间、主题发起者的名称和id等等,但不包含任何具体发言内容)。
下面这段code是在特定论坛版面显示该版主题列表的mysql query:
LEFT JOIN ibf_posts ON
(ibf_topics.tid=ibf_posts.topic_id AND ibf_posts.author_id=".$ibforums->member['id'].")
WHERE ibf_topics.forum_id=".$this->forum['id']."
这段源码的效果是从ibf_topics中找出应该在本版显示的topic。其本质就是SELECT ibf_topics.* WHERE ibf_topics.forum_id=".$this->forum['id']。那些SELECT DISTINCT和LEFT JOIN ibf_posts只是为了把使用者参予过的主题在主题列表中标示出来。
现在在(ibf_posts)中有rep_inc(花)和rep_dec(草)这两栏,记录每帖收花、收草的数量。我打算在显示主题列表时把主题帖(该主题第一个发言)的收花/草数也显示在主题列表上,如同西西河一样。可是怎样在显示主题列表的query当中把记录在ibf_posts的花草数量也一并查出来呢?
ibf_topics中有主题发起者的id和发表时间,ibf_posts中同样有发表者id和发表时间,通过比较两者就可以从ibf_posts找到相应的row并挖出该主题帖的rep_inc(花)和rep_dec(草)。问题是query要怎样写?
如果分开来做,比如说先执行topic query然后根据每行的结果再去执行ibf_posts的query找出花草数量,理论上会比较简单。但是根据该论坛的排版,一个主题列表会有好几十行结果,变相每次显示主题列表要额外执行好几十次query,效率恐怕会大打折扣,所以我不打算使用这一方法。
我不常接触SQL,想了好久还是想不出什么,请大家帮帮忙吧。
===============================
更直观地说:
ibf_topics
ibf_posts
其实我想做的就是在
SELECT * from ibf_topics WHERE forum_id=".$this->forum['id']."
之余把两个表中的id和date(橙色部份)比较一下,把ibf_posts里面match的那个row当中的rep_inc和rep_dec栏合并到ibf_topics被SELECT的row上面。
- 相关回复 上下关系8
🙂【求助】实现送花功能的SQL语法求助,回复者花
🙂这种写法效率太低 2 国之小民 字252 2008-11-04 08:02:50
🙂显示时确实是直接引用 1 卷心菜 字403 2008-11-04 15:06:20
🙂重复计算就是浪费 2 国之小民 字1322 2008-11-04 17:18:16
🙂也不能说得太绝对 2 沉宝 字402 2008-11-04 18:08:05
🙂现在规模还不大 1 卷心菜 字240 2008-11-05 03:53:50
🙂具体需求决定具体方法 2 国之小民 字184 2008-11-05 05:05:13
🙂你的要求是有难度的 2 沉宝 字666 2008-11-04 07:55:09