2015-09-08 38 views
1

我是新來的PHP。我有一個問題,我不能得到我的紀錄降序。打印記錄降序使用GROUP BY和ORDER BY子句

這裏是我的代碼

<?php 
    include ("connection.php"); 

    $q_opinion="SELECT r.client_id,c.id,t.id,a.id,o.id,c.name as opinion, r.notification_date, t.title as ttitle,a.title as atitle,o.title as otitle, l.title as ltitle, s.title as stitle, pr.opinion_id, pc.id, pr.client_id as pr_client, pc.address, pc.liaison_one, city.id, pc.head_office_id, city.city, pc.title as cname 
     FROM og_ratings r 
     LEFT JOIN og_companies c 
     ON r.client_id = c.id 
     LEFT JOIN og_rating_types t 
     ON r.rating_type_id = t.id 
     LEFT JOIN og_actions a 
     ON r.pacra_action = a.id 
     LEFT JOIN og_outlooks o 
     ON r.pacra_outlook = o.id 
     LEFT JOIN og_lterms l 
     ON r.pacra_lterm = l.id 
     LEFT JOIN og_sterms s 
     ON r.pacra_sterm = s.id 
     LEFT JOIN pacra_client_opinion_relations pr 
     ON pr.opinion_id = c.id 
     LEFT JOIN pacra_clients pc 
     ON pc.id = pr.client_id 
     LEFT JOIN city 
     ON city.id = pc.head_office_id 
     WHERE r.client_id IN (SELECT opinion_id FROM pacra_client_opinion_relations WHERE client_id = 50) 
Group By r.client_id 
ORDER BY r.client_id DESC 
    "; 
    $result = mysql_query($q_opinion) or die; 
    $rating = array(); 
    while($row = mysql_fetch_assoc($result)) 
    { 
     $id[] = $row['client_id']; 
     $action[] = $row['atitle']; 
     $opinion[] = $row['opinion']; 
    } 
    for ($i=0; $i<count($rating); $i++) 
    { 
     if ($rating[$i] == "")continue; 
     ?> 
      <table border="1"> 
       <tr> 
        <td><?= $id[$i] ?> </td> 
        <td><?= $opinion[$i] ?> </td> 
        <td><?= $action[$i] ?> </td> 
       </tr> 
      </table> 
    <?php 
    } 
?> 

現在我解釋一下我的代碼,我的問題

我有多個表,我使用LEFT JOIN加入了他們。首先我會解釋我的子查詢。該查詢包含ID的多個結果:

enter image description here

後,我有一個表og_ratings在我所反對的是id's

enter image description here

記錄在og_ratings表中的列client_id作爲外鍵opinion_id

我的代碼是運作良好,但我在降序排列

當我

我的代碼輸出爲 enter image description here

運行這段代碼我降序子句僅在 id工作不是數據有問題

在這裏它只適用於我的變量$id$opinion它不適用於$action。我想在$action上應用降序。

我希望你能理解我的問題。請幫幫我。

回答

0

是的。我做到了通過下面的代碼

<?php 
include ("connection.php"); 
$q_opinion="SELECT r.client_id,c.id,t.id,a.id,o.id,c.name as opinion, r.notification_date, t.title as ttitle,a.title as atitle,o.title as otitle, l.title as ltitle, s.title as stitle, pr.opinion_id, pc.id, pr.client_id as pr_client, pc.address, pc.liaison_one, city.id, pc.head_office_id, city.city, pc.title as cname 
FROM og_ratings r 
    inner join 
(
    select max(notification_date) notification_date, 
    client_id 
    from og_ratings 
    group by client_id 
    ORDER BY notification_date DESC 
) r2 
    on r.notification_date = r2.notification_date 
    and r.client_id = r2.client_id 
LEFT JOIN og_companies c 
ON r.client_id = c.id 
LEFT JOIN og_rating_types t 
ON r.rating_type_id = t.id 
LEFT JOIN og_actions a 
ON r.pacra_action = a.id 
LEFT JOIN og_outlooks o 
ON r.pacra_outlook = o.id 
LEFT JOIN og_lterms l 
ON r.pacra_lterm = l.id 
LEFT JOIN og_sterms s 
ON r.pacra_sterm = s.id 
LEFT JOIN pacra_client_opinion_relations pr 
ON pr.opinion_id = c.id 
LEFT JOIN pacra_clients pc 
ON pc.id = pr.client_id 
LEFT JOIN city 
ON city.id = pc.head_office_id 
WHERE r.client_id IN (SELECT opinion_id FROM pacra_client_opinion_relations WHERE client_id = 50)"; 
$result = mysql_query($q_opinion) or die; 
$rating = array(); 
while($row = mysql_fetch_assoc($result)) 
{ 
    $rating[] = $row['client_id']; 
    $action[] = $row['atitle']; 
    $opinion[] = $row['opinion']; 
    $date[] = $row['notification_date']; 
    $lrating[] = $row['ltitle']; 
    $srating[] = $row['stitle']; 
} 
for ($i=0; $i<count($rating); $i++) { 
    if ($rating[$i] == "")continue; 
    ?> 
    <table border="1"> 
    <tr> 
      <td><?= $rating[$i] ?> </td> 
      <td><?= $date[$i] ?> </td> 
      <td><?= $opinion[$i] ?> </td> 
     <td><?= $action[$i] ?> </td> 
      <td><?= $lrating[$i] ?> </td> 
      <td><?= $srating[$i] ?> </td> 
    </tr> 
    </table> 
<?php 
} 
?>