我想知道是否可以根据另一个表中的值的总和对表进行排序。我面临的问题如下:我在我的数据库上运行此查询:
<?php
$sql = "SELECT thread_id, SUM(upvoted) AS upvoted FROM upvotes GROUP BY thread_id ORDER BY upvoted LIMIT :start, {$number_threads}";
$stmt = $conn->prepare($sql);
$stmt->bindValue(':start', (int) $start, PDO::PARAM_INT);
$stmt->execute();
此后我正在制作这个循环
while($result = $stmt->fetch()) {
// do something with the following variables
$result['thread_id'];
$result['thread_content'];
$result['thread_ownerid'];
}
但是表upvotes中不存在列thread_id,thread_content和thread_ownerid。它们只存在于名为threads的表中。这个问题最直接的解决方案是加入。但是,加入的问题是表upvotes中的值都是非唯一的。所以在线程中唯一的thread_id可以存在于5432行中,并且在表格upvotes中提升的列中具有相应的-1 en 1值。
我想解决这个问题的方法是:创建一个带索引/键的数组/字典,将thread_id与其所有upvotes的总和相关联,然后将这个数组/ dict与表线程连接起来。
这是访问所需变量的一种理论方法,但任何允许我访问它们的方式都将非常感激。
非常感谢您在我的问题上投入时间!
答案 0 :(得分:1)
是的,您可以这样做,但您必须在选择结果中将此值添加为新列,如下所示:
select a.id,a.other,
(select count(*)
FROM table2 AS B
WHERE b.id=a.id) AS c
FROM table1 AS a
ORDER BY c;
C值将是其他表
中某些值的计数(或总和)