php - ORDER BY 变量 AFTER 语句

标签 php mysql sql sql-order-by

这是我的代码:

<?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 表连接起来,该表计算该版 block 的点赞数。

两者都显示为名称和由数字表示的分数。

默认情况下,它们按创建日期排序。我希望能够按分数对它们进行排序。但是,由于分数是在代码的第二部分中确定的,所以我不知道如何实现它。可能吗?

最佳答案

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

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/

相关文章:

php - 如何在 mysql (laravel) 中使 varchar 可以为空且唯一

php - PDO 绑定(bind)参数在登台和托管服务器上静默失败

php - TIMTHUMB.PHP 如何影响网站的 SEO 或图像 SEO

mysql - 当不存在元素时插入记录

php - 当我使用 CakeDC/users 插件时不显示用户名

mysql - 如何设置查询不接受不存在的字段

php - 定义 "Validation in the Model"

php - 对mysql中同一个表的多列求和

sql - 错误 : ORA-04043: object table name does not exist when describing any table within a specific user workstation from the SQL command line

sql - 使用 SQL 更新多对多表