我有这张桌子,有2门课程,有12个可能的科目(内容:科目ID,如果没有其他科目,则为NULL)。请注意,它最多可以包含50个不同的课程,而不仅仅是2个
我正在尝试通过WHILE显示课程名称(工作正常),并通过COALESCE在每门课程中显示课程的科目ID,这应该是最终结果:
用MySQL和MySQL创建程序集-CURSO:1-CURSO:2-CURSO:10-
MásterenDiseñoy Desarrollo网站-CURSO:1-
但是我的COALESCE表达式出现了一些问题:
用MySQL和MySQL创建程序集-CURSO:1-CURSO:1-
MásterenDiseñoy Desarrollo网站-光标:1-光标: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>';
}
最佳答案
好的,有两个明显的错误: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>';
}