我有两个表和三个查询。我想计算一个表中的列数,第二个表中不同列的数量,然后按三者的平均值进行排序。我尝试使用 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 个查询来自具有不同数据类型的同一个表。我只想计算不同的值并根据它们的平均值对我的表进行排序。联合是正确的做法吗?
主要问题是您正在使用
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
";
这样,您就可以从每个表中获取计数,并根据计算出的计数平均值对结果进行排序。