获取 id 列表的所有字段的值,而无需在 mysql 查询中指定其 id


Get values of all fields for an list of ids without specifying their id in mysql query?

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

但我想知道

  • 是否可以不指定代理 ID,我得到链接到数据库中所有代理的所有答案,我不知道该怎么做?

  • 如果我有一个代理数组并使其返回所有代理的所有 Weigtage,以数组形式返回特定问题的代理 Weigtage,是否可以循环 SQL 查询。

的表结构

代理的表结构

agent_id//AL 代理 ID123

答案的表结构

answer_id//所有答案 ID Weigtage//要添加的每个代理都有单独总和 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答案 IDresponse_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
    )
)

不知道你的方案,很难给你一个好的建议。您了解更多信息的基本关键字是JOINS和GROUP 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(...)
   ...
)

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