这是我的代码:

<?php
$data = mysql_query("SELECT * FROM board") or die(mysql_error());
while($info = mysql_fetch_assoc( $data ))
{
if(!empty($info['user'])){
Print "".$info['user'].""; }
else {
}

myOtherQuery($info['id']);
}

function myOtherQuery($id) {

$result3 = mysql_query("SELECT COUNT(source_user_id) FROM likes
INNER JOIN pins ON pins.id = likes.pin_id
WHERE pins.board_id='$id'");
$c = mysql_result($result3, 0); // Cumulative tally of likes for board
{
Print "$c";
}
}
?>

第一部分获取用户名和线路板详细信息(线路板与相册中的线路板相同)。
第二部分将该数据与另一个sql表连接起来,该sql表计算出该板拥有的like数。
两者都显示为名称和数字表示的分数。
默认情况下,它们按创建日期排序。我想按分数来点。但是,由于分数是在代码的第二部分确定的,所以我不知道如何实现它。有可能吗?

最佳答案

当然,解决方案是首先通过LEFT JOIN对返回每个board_id计数的子查询同时进行查询:

SELECT
  board.*,
  /* Your PHP code will retrieve the likes count via this alias `numlikes` as in $info['numlikes'] */
  numlikes
FROM
  board
  LEFT JOIN (
    /* Subquery returns count per board_id */
    SELECT pins.board_id, COUNT(source_user_id) AS numlikes
    FROM
     likes
     INNER JOIN pins ON pins.id = likes.pin_id
    GROUP BY pins.board_id
  ) likes ON board.id = likes.board_id
ORDER BY numlikes

在循环中执行单个查询几乎总是比执行n个查询更有效。你应该尽可能做到这一点。

关于php - ORDER BY变量AFTER语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17116577/

10-11 02:50