西西河

主题:【求助】实现送花功能的SQL语法求助,回复者花 -- 卷心菜

共:💬23 🌺28 新:
全看分页树展 · 主题
家园 【求助】实现送花功能的SQL语法求助,回复者花

最近想给某个论坛实现类似河里送花的功能,遇上一个难题。

先简单地说一下论坛资料库结构:

ipf_posts---记录所有post的表格(所有主题帖与回复帖的具体发言、状态,包括所属的主题id,发言时间,发言者名称和id等等)。

ibf_topics---记录所有topic的表格(主题id、名称、发表时间、主题发起者的名称和id等等,但不包含任何具体发言内容)。

下面这段code是在特定论坛版面显示该版主题列表的mysql query:

$query = "SELECT DISTINCT(ibf_posts.author_id), ibf_topics.* FROM ibf_topics

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上面。

关键词(Tags): #SQL
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河