【问题标题】:Combining multiple queries into an output将多个查询组合成一个输出
【发布时间】:2021-01-28 16:21:08
【问题描述】:

通过反馈调查,他们可以选择差、中性或好。我想把坏的和好的编译成一个表。 我正在尝试从 ajax 请求创建一个计数“表”输出以替换 div 内容。 理想情况下,它看起来像:

Experience Negative Positive
Cleanliness 12 18
Check-In/Out 4 30
Food 2 12
Staff 1 8

所以我的mysql有清洁度、食物等列。里面是负面/中性/正面的评级。

我曾想过使用单个 php 脚本来填充表格,但到目前为止我想出了这个:

我做了两个查询:

$pos = $pdo->query("SELECT COUNT(IF(Cleanliness = 'positively', 1, NULL)) AS Cleanliness, 
                        COUNT(IF(Check-In/Out = 'positively', 1, NULL)) AS Check-In/Out, 
                        COUNT(IF(Food = 'positively', 1, NULL)) AS Food, 
                        COUNT(IF(Staff = 'positively', 1, NULL)) AS Staff 
                    FROM responses");

$neg = $pdo->query("SELECT COUNT(IF(Cleanliness = 'negatively', 1, NULL)) AS Cleanliness, 
                        COUNT(IF(Check-In/Out = 'negatively', 1, NULL)) AS Check-In/Out, 
                        COUNT(IF(Food = 'negatively', 1, NULL)) AS Food, 
                        COUNT(IF(Staff = 'negatively', 1, NULL)) AS Staff 
                    FROM responses");

然后获取它们:

$positives = $pos->fetch(PDO::FETCH_ASSOC);
$negatives = $neg->fetch(PDO::FETCH_ASSOC);

现在,它们已排列,但如何将它们组合到输出中?我不能 Key => Value => Value 对吗?

foreach (array_combine($positives, $negatives) as $pos => $neg) {
    echo "$neg - $pos <br>";
}

所以我得到了我的否定和肯定,但现在没有行“标题”。 如果我只是输出数组,我可以得到行标题,但只能得到一个计数。

我是否应该放弃尝试在单个脚本中组合并创建一个“通用”脚本并发布列以及仅针对单个计数输出的所需响应?这将是很多 ajax 查询访问同一个 php 脚本。

谢谢!

SQL 小提琴,不知道如何让右侧做我的 php 对 PDO 所做的事情。 http://sqlfiddle.com/#!9/37c0c2e/7

【问题讨论】:

标签: php mysql


【解决方案1】:

您可以使用单个 UNION 查询获取表

SELECT 'staff', COUNT(IF(`staff` = 'negative', 1, NULL)) negative, COUNT(IF(`staff` = 'positive', 1, NULL)) positive
FROM responses 
UNION 
SELECT 'cleanliness', COUNT(IF(`cleanliness` = 'negative', 1, NULL)) negative, COUNT(IF(`cleanliness` = 'positive', 1, NULL)) positive
FROM responses 
UNION 

SELECT 'food', COUNT(IF(`food` = 'negative', 1, NULL)) negative, COUNT(IF(`food` = 'positive', 1, NULL)) positive
FROM responses 
UNION
SELECT 'check-in/out', COUNT(IF(`check-in/out` = 'negative', 1, NULL)) negative, COUNT(IF(`check-in/out` = 'positive', 1, NULL)) positive
FROM responses 

【讨论】:

  • 然后我运行一个循环来吐出结果。 foreach ($table as $row) { echo '';回声''。 $row['staff'] 。 '';回声''。 $row['negative'] 。 '';回声''。 $row['正面'] 。 '';回声'';谢谢,scaisEdge
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
相关资源
最近更新 更多