2014-04-04 73 views
0

我有這張表,2個課程有12個可能的主題(內容:主題ID,如果沒有更多主題存在,則爲NULL)。請注意,它可以包含多達50周不同的課程,不僅2MySql COALESCE不能正常工作

table

我用,而試圖證明課程名稱(workis精細)和COALESCE在每門課程的課程的科目ID展示,這應該是最終的結果:

CURSO德ProgramaciónCREATIVA CON PHPŸMySQL的 - CURSO:1 - CURSO:2 - CURSO:10 -

主恩DISENOŸDESARROLLO網 - CURSO:1 -


但事情未能如我COALESCE表達我得到:

CURSO德ProgramaciónCREATIVA CON PHPŸMySQL的 - CURSO:1 - CURSO:1 -

主恩DISENO ŸDESARROLLO網 - CURSO:1 - CURSO:1 -

下面是代碼:

$select = select("SELECT * FROM course_conf JOIN course_type ON ct_id=co_fk_ct_id ORDER BY co_name"); 




while($registroBbdd = consultaRegistro($select)) 
{ 
    $courseName=$registroBbdd['co_name']; 

    $result = select("SELECT COALESCE(co_subj1,co_subj2,co_subj3,co_subj4,co_subj5,co_subj6,co_subj7,co_subj8,co_subj9,co_subj10,co_subj11,co_subj12) FROM course_conf"); 

     echo '<div class="contentColumn80"> 
       <span class="tableContentText ">'.$courseName.' - </span>'; 

     while($row=mysql_fetch_array($result)) 
     { 
       echo '<span>CURSO: '.$row['COALESCE(co_subj1,co_subj2,co_subj3,co_subj4,co_subj5,co_subj6,co_subj7,co_subj8,co_subj9,co_subj10,co_subj11,co_subj12)'].' - </span>'; 
     } 
     echo '</div>'; 
} 
+1

你COALESCE將返回co_subj1的價值,因爲它是NOT NULL的第一表達,因此它總是1. http://stackoverflow.com/questions/13366488/coalesce-function-in-tsql – Sky

回答

1

OK,有兩個明顯的錯誤:

  • COALESCE()將始終返回第一個參數,這是不爲空(在你的情況總是存儲在co_subj1值)
  • 第二SQL-查詢不包括任何WHERE條款。正因爲如此,你得到的所有課程co_subj1

雖然可能不是最好的解決方案成爲可能,這應該工作:

$select = select("SELECT * FROM course_conf JOIN course_type ON ct_id=co_fk_ct_id ORDER BY co_name"); 




while($registroBbdd = consultaRegistro($select)) 
{ 
    $courseName = $registroBbdd['co_name']; 

    echo '<div class="contentColumn80"> 
       <span class="tableContentText ">'.$courseName.' - </span>'; 

    for($i = 1; $i <= 12; $i++) 
    { 
     if($registroBbdd['co_subj'.$i] != null) { 
      echo '<span>CURSO: ' . $registroBbdd['co_subj'.$i] . ' - </span>'; 
     } 
    } 
    echo '</div>'; 
} 
+1

非常感謝你 – Biomehanika