复杂的mysql查询需要结果排序

时间:2014-01-02 08:20:29

标签: php mysql

我有3个mysql表。我希望在特定日期(例如第1天,第2天,第3天)以d_money的降序显示团队的排行榜。

user(u_id(p),name)
team(t_id(p),u_id(f),t_name,t_money,days_money) and 
history(t_id(f),day,d_money).

首先我收集了t_id中的所有$tid_arr。然后,对于每个t_id,我写了一个查询来获取t_name及其天数。(特定日期。这里 - 第1天)。它显示结果。但我希望结果排序(d_money的降序)。但我找不到灵魂。

 $query = $con->prepare("SELECT t_id FROM team");   
$query->execute();

$tid_arr = $query->fetchAll();



 echo "<table border='1'>";

foreach($tid_arr as $tid)
 {
    $que = $con->prepare("SELECT d_money, t_name FROM team, history WHERE history.t_id=$tid['t_id'] AND team.t_id=history.t_id` AND history.day='1'");
                     $que->execute();


                               while($info = $que->fetch(PDO::FETCH_NUM))
                              {

                                     echo "<tr>";
                                     echo  "<td>".$info[0]."</td>";
                                     echo  "<td>".$info[1]."</td>";
                                     echo "</tr>";
              }
}
                echo "</table>";

2 个答案:

答案 0 :(得分:2)

如果您想按d_money然后t_id订购,可以使用以下查询。第一个查询是不必要的,应该删除。

SELECT d_money, t_name FROM team a 
LEFT JOIN history b ON a.t_id=b.t_id
WHERE history.day='1' 
ORDER BY d_money DESC, t_id DESC

P.S。 <{1}}表未使用?

答案 1 :(得分:0)

将一个Join和Order By子句添加到您的SQL语句

echo "<table border='1'>";
$que = $con->prepare("SELECT T.t_id, H.d_money, T.t_name
                  FROM team T INNER JOIN history H ON T.t_id=H.t_id
                  WHERE H.day='1'
                  ORDER BY d_money DESC");
$que->execute();

while ($info = $que->fetch(PDO::FETCH_NUM)) {
 echo "<tr>";
 echo  "<td>".$info[0]."</td>";
 echo  "<td>".$info[1]."</td>";
 echo "</tr>";
}

echo "</table>";