Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高级MySQL查询(基于其他两个表的排名结果)_Mysql_Sql - Fatal编程技术网

高级MySQL查询(基于其他两个表的排名结果)

高级MySQL查询(基于其他两个表的排名结果),mysql,sql,Mysql,Sql,我已经试着让它正常工作了一段时间了,但就是不知道该怎么做,希望这里有人能帮我 我有三张桌子: Table A Table B Table C 我想根据排名从表A中获得前10名的结果,排名将取决于表B和表C中的信息。排名将使用以下公式: Ranking = (COUNT(id) from table C WHERE c.a_id = a.id) as count_weight + (COUNT(id) FROM table B WHERE b.a

我已经试着让它正常工作了一段时间了,但就是不知道该怎么做,希望这里有人能帮我

我有三张桌子:

Table A
Table B
Table C
我想根据排名从表A中获得前10名的结果,排名将取决于表B和表C中的信息。排名将使用以下公式:

Ranking = (COUNT(id) 
    from table C 
    WHERE c.a_id = a.id) as count_weight + 
    (COUNT(id) 
    FROM table B 
    WHERE b.a_id = a.id)*(count_weight*0.25) + a.views
换句话说,我希望排名等于由以下因素确定的分值:

  • 表C中与我感兴趣的表A中的记录相对应的记录数
  • 如果表B中存在一条与我感兴趣的表a中的记录相对应的记录,我希望额外增加25%的分数(从#1中获得的分数乘以0.25)-在这种情况下,记录将存在或不存在,因此它将始终为0或1
  • 表A中记录的每个“视图”的点(表A的字段)
  • 希望我用一种可以理解的方式来表达


    谢谢

    我想这就是你想要的:

    SELECT a.*, COUNT(c.id) * IF(COUNT(b.id),1.25,1) + a.views AS Ranking
    FROM a LEFT JOIN c ON a.id = c.a_id LEFT JOIN b ON a.id = b.a_id
    GROUP BY a.id
    ORDER BY Ranking DESC
    LIMIT 10
    

    如果您不想选择排名,您可以将该列的公式直接放入ORDER BY子句。

    如果可能,尝试创建sql FIDLE并举例说明您希望获得的输出示例示例数据和所需结果将真正帮助您更容易理解。非常感谢!这正是我想要的!