0

エージェントにリンクされたすべての回答の重みの合計を取得する SQL クエリがあります。たとえば 1 などのエージェント ID を指定すると、うまくいきます。

しかし、私は知りたいです

  • エージェントIDを指定せずに可能ですか?データベースにあるすべてのエージェントにリンクされたすべての回答を取得します.zendを使用してそれを行う方法がわかりません?

  • エージェントの配列があり、すべてのエージェントのすべての重みを返して、特定の質問に対するエージェントの重みを配列形式で返す場合、SQL クエリをループできますか。

テーブルのテーブル構造

テーブルエージェントのテーブル構造

agent_id // すべてのエージェント ID 1 2 3

表回答の表構造

answer_id // すべての回答 ID 重み付け // 追加される各エージェントの合計は個別に 11 1 12 0 13 -1

テーブル顧客調査のテーブル構造

// 顧客 ID // 障害 ID // 調査 ID 1 1 4 2 3 5

テーブルフォールトのテーブル構造

fault_id エージェント ID

// 3 3

//4 5 // これはすべてランダム データです

テーブル応答のテーブル構造

// 回答 ID アンケート ID customer_id 回答 ID response_id sq_id cs_id answer_id

テーブル survey_question のテーブル構造

survey_id question_id

各回答はフォルトに関連付けられています。およびエージェントの障害。顧客がアンケートに回答します。お客様の対応に誤りがありました。custome response cs_id を response に。質問は特定のアンケートに関連付けられています。ややこしいので2日かかりました

  • 20 個のランダムなエージェント ID があり、mysql でそれらをループして、各エージェント ID の結果を取得する必要があります。現在、私は1つのエージェントを取得しています。

SELECT SUM( weightage )
FROM answer a
WHERE a.answer_id
  IN (
    SELECT r.answer_id
    FROM response r, survey_question sq
    WHERE r.sq_id = sq.sq_id
      AND sq.survey_id =4
      AND sq.question_id =28
      AND r.cs_id
        IN (
          SELECT cs.cs_id
          FROM customer_survey cs, faults f
          WHERE cs.fault_id = f.fault_id
            AND agent_id =1
        )
  )`

単一のエージェントに対するこのクエリの出力は次のとおりです。

Array
(
    [0] => Array
    (
       [SUM( weightage )] => 2
    )
)

次のようなエージェント ID に基づいて、出力を次のようにしたい

Array
(
//  agent id 1
     [1] => Array 
     (
         [SUM( weightage )] => 2
     )
// agent id 2
    [2] => Array 
    (
        [SUM( weightage )] => -1
    )
// agent id 3
    [3] => Array 
    (
        [SUM( weightage )] => 5
    )
// agent id 4
    [4] => Array 
    (
        [SUM( weightage )] => 4
    )
// agent id 5
    [5] => Array 
    (
        [SUM( weightage )] => 11
    )
)
4

1 に答える 1

1

without knowing your scheme its hard to give you a good advice. The basic keywords for you to find out more are JOINS and GROUP BY.

Your Query then should look something like this:

SELECT cs.agent_id, SUM (a.weightage) AS sum_weightage
 FROM customer_survey cs
  JOIN faults f ON cs.fault_id = f.fault_id
  JOIN response r ON r.cs_id = cs.cs_id
  JOIN answer a ON a.a.answer_id ON r.answer_id
  JOIN survey_question sq ON r.sq_id = sq.sq_id
 WHERE sq.survey_id = 4 AND sq.question_id =28 
 GROUP BY cs.agent_id

The output the would be something like:

array(
   array('agent_id' => 1, 'sum_weightage' => 12),
   array(...)
   ...
)

Thats not exactly what you want, but shold be nearest to your expectations.

于 2012-06-18T06:58:09.723 に答える