所以我现在正在完成一项任务,我无法绕过逻辑。
我必须使用基于资格代码的课程列表填充HTML选择框,其中用户尚未注册课程。
这是我目前的代码:
//Get logged in users id
$currentID = getIDForUser($_SESSION['username']);
//Get logged in users qualification code
$qualificationCode = getUserQualification($currentID);
//Get and display list of avaliable courses for qualificationCode
$query = mysql_query("");
while($row = mysql_fetch_array($query)) {
$courseName = $row['courseName'];
$courseCode = $row['courseCode'];
print("<option value='$courseCode'>$courseName</option>");
}
数据库的布局如下
课程表:
课程表:
所以,基本上在这个阶段,组合框将填充多媒体&amp;设计以及数据结构&amp;算法。但是,如果我选择多媒体并注册它,它将不再填充该课程的框。
答案 0 :(得分:0)
mysql_*
,已弃用。请改为使用mysqli_*
或PDO。latin1_swedish_ci
更改为utf8_general_ci
,否则如果您决定在数据库中添加特殊字符,则会遇到问题。现在,要真正解决您的问题:
在你的问题中,你不能说出你的问题是什么,具体而言,但根据标题我假设你知道如何构建除SELECT
查询之外的所有内容。
因此,首先要选择当前用户注册的所有课程。然后,根据结果,您要获取所选的列表中没有的所有课程。
使用子选择可以相当容易地完成此操作:
// Assuming $mysqli is an OOP database handle
$query = $mysqli->prepare('SELECT `courseName`, `courseCode` FROM `Courses` WHERE `courseCode` NOT IN (SELECT `courseCode` FROM `Courseoccurrence` WHERE `personID` = ?)');
$query->bind_param('i', $currentID);
$result = $query->get_result();
while($row = $result->fetch_array())
// ...
SQL说明:
我认为SELECT
,FROM
,WHERE
和NOT
无需解释。
IN
检查值是否在'A' IN ('A', 'B', 'C')
之类的列表中
而(SELECT ...)
是一个所谓的子选择(请参阅Subqueries),这是一个简单的SELECT
,其结果可以在查询中使用,如果它只有一列(因为我们只选择courseCode
),它可以用作IN
的参数。