0

我有一个 sql 查询,从中我得到链接到代理的所有答案的权重总和。当我指定代理 id 例如 1 时,它对我有用。

但我想知道

  • 是否有可能在不指定代理 ID 的情况下获得与我在 db 中拥有的所有代理相关的所有答案我不知道如何使用 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 agent_id

// 3 3

//4 5 // 所有这些都是随机数据

表响应的表结构

// 响应 id 调查 id customer_id 回答 id response_id sq_id cs_id answer_id

表survey_question的表结构

调查 ID 问题 ID

每个答案都与一个故障相关联。和代理的错误。客户接受调查。客户反应错误。客户响应 cs_id 到 response 。问题与特定调查相关联。而且你有点困惑,花了我两天时间

  • 我有 20 个随机代理 id,我需要在 mysql 中循环遍历它们并获得每个代理 id 的结果。目前,我正在为一名代理服务。

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

不知道你的计划很难给你一个好的建议。让您了解更多信息的基本关键字是JOINSGROUP BY

然后,您的查询应如下所示:

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

输出将类似于:

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

这不完全是您想要的,但应该最接近您的期望。

于 2012-06-18T06:58:09.723 回答