0

嗨朋友我在 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 ) 根据回复列出前十个主题,这将基于回复的数量

我试过->

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

不工作

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

例如

如果他选择 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 方面,我将从选择多个下拉列表中获取 category_id 数组,例如 array(1,2,3,4)

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

category_id IN (1,3,2,4)以mysql查询的形式 **

**我可以直接传递一个数组吗

category_id IN ($ids)$ids数组在哪里**

我是 mysql 的新手,请帮助我,您的帮助将不胜感激:)

4

1 回答 1

1

对于第一个问题:

您必须使用 LEFT JOIN 并将(响应的主题 ID 行)匹配到(主题的 ID)然后计数(响应的主题 ID)并按(响应的主题 ID)分组所有内容。

例如:

响应表 = 响应

response_id

topic_id

响应消息

主题表 = 主题

ID

标题

内容

查询是

SELECT topics.title,topics.content,COUNT(responses.topic_id) AS count FROM topics LEFT JOIN response 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)
于 2012-07-26T02:45:37.160 回答