2012-04-03 17 views
0

我正在試圖找出這樣做的最佳方式,但不知道如何。請有人幫助我嗎?如果不止一個結果,從一個字段在數據庫中的排名值,並只返回排名最高/最低值

說我有4分 - 金,銀,銅牌和在開發 其中一個標記將是數據庫中$ gsb ['gsb']的值。

下面的代碼將課程和回聲返回到img和鏈接。 我正在努力的是如何排列上面的4個值,以便如果返回多個結果,它將根據所選排名獲得最高或最低值,並且只回顯那一個結果/ img

希望這是明確的。我會很感激任何幫助/指導。

 $metacourses = mysql_query("SELECT * FROM mdl_course_meta where parent_course = $courseid"); 
     while($parentcourse = mysql_fetch_assoc($metacourses)){ 
     //Select GSB for course 
     $parentcourseid = $parentcourse['child_course']; 
     $gsb = mysql_fetch_array(mysql_query("SELECT * FROM mdl_gsb_content where course = $parentcourseid")); 


     //Used for $img name 
     if ($gsb['gsb']=="") {$thegsbscore = "in_development";} 
     else {$thegsbscore = $gsb['gsb'];} 

     if ($viewgsb == 'Yes'){ 
     $img = '<div align="center"><img src="'.$CFG->wwwroot.'/blocks/gsb/images/'.strtolower($thegsbscore).'.png" width="90" height="98"></div>'; 
     $link = '<p align="center"><b><a href="'.$CFG->wwwroot.'/blocks/gsb/gsb_explained.htm" target="_blank">How can I improve my course medal?</a></b></p>'; 
     } 
     else { 
      $img = ''; 
      $message = ''; 
      $viewgsb = ''; 
      $link = ''; 
     } 
} 

$this->content   = new stdClass;  
$this->content->text = $message . $img . $link;  
$this->content->footer = '';  
return $this->content; 
return $this->content->text; 

回答

1

實施Pushpeshs權重表和編碼的SQL查詢周圍的工作後,我終於想出了正確的方法。

$metacourses = mysql_query("SELECT * FROM mdl_course_meta where parent_course = $courseid"); 
    //Select GSB for course 

    $types = array(); 

    while(($row = mysql_fetch_assoc($metacourses))) { 
     $types[] = $row['child_course']; 
    } 

    $theids = implode(',',$types); 


    $gsb = mysql_query(" 
    SELECT * FROM mdl_gsb_content 
    JOIN mdl_gsb_scores on mdl_gsb_scores.score = mdl_gsb_content.gsb 
    WHERE mdl_gsb_content.courseid IN ($theids) 
    ORDER by mdl_gsb_scores.rank ASC 
    LIMIT 1"); 

    while($score = mysql_fetch_assoc($gsb)) 
    //Work out img 
    $thegsbscore = $score['gsb']; 

    if ($viewgsb == 'Yes'){ 
     $img = '<div align="center"><img src="'.$CFG->wwwroot.'/blocks/gsb/images/'.strtolower($thegsbscore).'.png" width="90" height="98"></div>'; 
     $link = '<p align="center"><b><a href="'.$CFG->wwwroot.'/blocks/gsb/gsb_explained.htm" target="_blank">How can I improve my course medal?</a></b></p>'; 
     $message = '<div align="center">Your Unit VLE is:'.print_r($types).'</div><br />'; 

    } 
    else { 
     $img = ''; 
     $message = ''; 
     $viewgsb = ''; 
     $link = ''; 
    } 
+1

高興你得到它排序。 – encodes 2012-04-03 16:36:29

2

爲您的值分配權重,最好在表中。

使用這樣的:

TABLE_WEIGHT (It's a better idea to store these in a separate table, that way you can always add/delete more scores, irrespective of other tables) 

ID(PRIMARY KEY) SCORE_NAME(VARCHAR) SCORE_WEIGHTAGE(INT/ENUM) 
1    In Development  1 
2    Bronze    2 
3    Silver    3 
4    Gold    4 

現在,你可以隨時排序您的數據通過使用SQL在你的第二個查詢JOIN。另外,如果有多個結果,可以使用PHP的usort來篩選結果。

希望這會有所幫助。

+0

看起來像agreat解決方案將開始實施,並讓你知道我如何得到。謝謝 – Codded 2012-04-03 09:36:57

1

你可以通過多種方式做到這一點,通過映射體重的字段排序,加入另一張有體重和得到體重的表格。 pushpesh是最好的解決辦法,那麼你會怎麼做

SELECT * FROM mdl_gsb_content 
where course = $parentcourseid 
join table_weight 
on table_weight.score_name = mdl_gsb_content.gsb 
order by table_weight.SCORE_WEIGHTAGE. 

(假設GSB是他得分)

未經測試,但應該做的伎倆。

編輯由Codded測試後:

SELECT * FROM mdl_gsb_content 
JOIN mdl_gsb_scores on mdl_gsb_scores.score = mdl_gsb_content.gsb 
WHERE mdl_gsb_content.courseid = $parentcourseid 
ORDER by mdl_gsb_scores.rank ASC 
LIMIT 1 
+1

謝謝 - 我不想通過SCORE_WEIGHTAGE命令,我想獲得最高的一個,只是在查詢中返回一行,所以(其中SCORE_WEIGHTAGE是最高的)。我怎樣才能做到這一點? – Codded 2012-04-03 09:43:00

+1

你可以使用LIMIT 1來返回第一個結果 – encodes 2012-04-03 09:48:23

+0

偉大的一點!謝謝;) – Codded 2012-04-03 09:49:16

相關問題