从多个类别中获取主题,并在mysql / php中显示响应的前十个主题

时间:2012-07-26 02:11:14

标签: php mysql database subquery

嗨朋友们,我在php中列出了可能与多个类别相关的主题

我的数据库架构是

topics

topic_id
user_id
topic_name

category 

category_id
category_name


topic_category (for association)

tc_id
topic_id
category_id

topic_response //结果

tr_id
topic_id
response ( given in a form of 5 star rating so its in range of 1-5 always )
user_id

我需要做的是

1st)根据回复列出前十个主题ya它将基于回复计数

我试过 - >

select t.* ,count(tr.response) as votes from topics t , topic_response tr where t.topic_id=tr.topic_id group by tr.topic_id order by votes LIMIT 10

不工作

第二次)用户将显示主题列表。他可以选择他想要的类别也可以是多个。

例如

如果他选择category_id 1,2,3,4,则会列出此类别中列出的主题。

我试过

select t.* from topics t ,topic_category tc where tc.topic_id = t.topic_id and category_id IN (1,3,2,4) 
// not able to get idea on this i would prefer if i could do this in subquery since i also need to check if the user has already responded to that question .

** 3)如果我得到一个查询工作假设。

从php方面我将从select select dropdown获取一个category_id数组 像数组(1,2,3,4)

所以我在想如何让这个查询接受类别ID

以mysql query **中的category_id IN (1,3,2,4)形式

**我可以直接传递像

这样的数组

category_id IN ($ids)其中$ids是数组**

我是mysql的新手,请帮帮我 你将会感激不尽:) :)

1 个答案:

答案 0 :(得分:1)

对于第一个问题:

你必须使用LEFT JOIN并匹配(响应的主题id行)到(主题的id)然后计数(响应的主题id)和GROUP everything by(响应的主题id)。

例如:

回应表=回复

RESPONSE_ID

topic_id

response_message

主题表=主题

ID

标题

含量

查询

SELECT topics.title,topics.content,COUNT(responses.topic_id)AS count FROM topics LEFT JOIN响应ON topics.id = responses.topic_id GROUP BY count LIMIT 10

问题2:

  1. 您可以尝试使用AND(IN 1 OR 2 OR 3 OR 4
  2. 您可以尝试使用BETWEEN 1 AND 4
  3. WHERE(CATEGORY_ID> = 1&安培;&安培; CATEGORY_ID< = 4)