如何使用 Union 或其他方式连接三个查询?

问题描述 投票:0回答:1

我有两个表和三个查询。我想计算一个表中的列数,第二个表中不同列的数量,然后按三者的平均值进行排序。我尝试使用 UNION 但似乎我只让第一个查询工作。

这是我的代码:

$sql3 = "
   SELECT COUNT(*) AS count 
   FROM history 
   WHERE user ='$userid'
   UNION ALL
   SELECT COUNT(*) AS count2 
   FROM posts 
   WHERE userid ='$userid' AND `type` = 'Q'
   UNION ALL
   SELECT COUNT(*) AS count3 
   FROM posts 
   WHERE userid ='$userid' AND `type` = 'A'
   ORDER BY (count + count2 + count3 ) / 3 DESC
";

我不知道问题出在哪里,但是当我运行代码时,它显示未定义的列 count2 和 count3。最后 2 个查询来自具有不同数据类型的同一个表。我只想计算不同的值并根据它们的平均值对我的表进行排序。联合是正确的做法吗?

php sql mysql union
1个回答
0
投票

主要问题是您正在使用

UNION
并且
UNION
适用于相同的列或相同的别名,但您为每个使用不同的别名,例如
count
count2
count3

<?php
$sql = "SELECT * 
    FROM ( SELECT COUNT(*) AS count FROM history WHERE user ='$userid' ) t1
    JOIN ( SELECT COUNT(*) AS count2 FROM posts WHERE userid ='$userid' AND `type` = 'Q' ) t2
    JOIN ( SELECT COUNT(*) AS count3 FROM posts WHERE userid ='$userid' AND `type` = 'A' ) t3
    ORDER BY (t1.count + t2.count2 + t3.count3) / 3 DESC
";

这样,您就可以从每个表中获取计数,并根据计算出的计数平均值对结果进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.