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 ) 回答に基づいて上位 10 のトピックをリストします。回答の数に基づきます。

やってみた ->

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

動作していません

2番目) ユーザーにはトピックのリストが表示されます。彼は自分が望むカテゴリを選択できますが、それも複数にすることができます。

例えば

彼が選択した場合 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 側から、array(1,2,3,4) のような複数選択ドロップダウンから category_id の配列を取得します。

だから私はこのクエリがカテゴリIDを受け入れるようにする方法を考えていました

category_id IN (1,3,2,4)in mysql query**の形式で

**のような配列を直接渡すことはできますか

category_id IN ($ids)配列はどこ$idsですか**

私はmysqlの初心者です。助けてください。助けていただければ幸いです:)

4

1 に答える 1

1

最初の質問:

LEFT JOIN を使用し、(応答のトピック ID 行) を (トピックの ID) に一致させてから、(応答のトピック ID) をカウントし、すべてを (応答のトピック ID) でグループ化する必要があります。

例えば:

応答テーブル = 応答

response_id

topic_id

応答メッセージ

トピック テーブル = トピック

ID

題名

コンテンツ

クエリは

SELECT topic.title,topics.content,COUNT(responses.topic_id) AS count FROM topic LEFT JOIN 応答 on topic.id = response.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(カテゴリ ID>=1&&カテゴリ ID<=4)
于 2012-07-26T02:45:37.160 に答える