获取id列表的所有字段的值,而不在mysql查询中指定它们的id?

时间:2012-06-18 06:04:35

标签: php mysql group-by aggregate-functions

我有一个sql查询,我从中获得与代理链接的所有答案的权重总和。当我指定例如1的代理ID时,它为我工作。

但我想知道

  • 是否可以在不指定代理ID的情况下获取所有与我在db中拥有的所有代理相关的答案我不知道该如何做到这一点我们是什么时候?

  • 如果我有一个代理数组并且让它返回所有代理的所有权重以返回数组形式的特定问题的代理权限,则可以循环SQL查询。

表的表结构

表代理的表结构

agent_id // al agent ids 1 2 3

表格答案的表格结构

answer_id //所有答案ids weigtage //将被添加为每个代理人的个人总和  11 1  12 0  13 -1

表客户调查的表格结构

// customer id // fault id // survey 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的表结构

survey_id question_id

每个答案都与一个错误相关联。和代理人的错。客户进行调查。客户反应错误。客户响应cs_id响应。问题与特定调查有关。而且我有点迷惑了我两天

  • 我有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
    )
)

1 个答案:

答案 0 :(得分: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(...)
   ...
)

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