Php MySQL选择逻辑

Php MySQL选择逻辑,php,mysql,database,Php,Mysql,Database,所以我现在正在做一项作业,我无法理解其中的逻辑 我必须在HTML选择框中填充基于资格代码的课程列表,其中用户尚未注册课程 这是我目前的代码: //Get logged in users id $currentID = getIDForUser($_SESSION['username']); //Get logged in users qualification code $qualificationCode = getUserQualification($currentID); //Get a

所以我现在正在做一项作业,我无法理解其中的逻辑

我必须在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>");
}
//登录用户id
$currentID=getIDForUser($_会话['username']);
//获取登录用户资格代码
$qualificationCode=getUserQualification($currentID);
//获取并显示资格代码的可用课程列表
$query=mysql\u query(“”);
while($row=mysql\u fetch\u array($query)){
$courseName=$row['courseName'];
$courseCode=$row['courseCode'];
打印($courseName);
}
数据库的布局如下所示

课程表:

课程发生率表:

因此,基本上在这个阶段,组合框将填充多媒体和设计以及数据结构和算法。但是,如果我选择多媒体并注册,它将不再在方框中填充该课程

  • 停止使用mysql,它已被弃用。改用
    mysqli.*
    或PDO
  • 这不是绝对必要的,但您可能希望将排序规则从
    latin1\u swedish\u ci
    更改为
    utf8\u general\u ci
    ,否则,如果您决定在数据库中放置特殊字符,您将面临问题
  • 现在,要真正回答您的问题:

    在您的问题中,您没有明确说明您的问题是什么,但根据标题,我假设您知道如何构建除
    SELECT
    查询之外的所有内容。
    因此,首先要选择当前用户注册的所有课程。然后,根据结果,您希望获取不在您刚才选择的列表中的所有课程。
    这可以通过一个子选择相当容易地完成:

    SQL解释:

    我认为
    选择
    来自
    其中
    不需要解释。
    IN
    检查值是否在类似于('a','B','C')中的
    'a'的列表中
    (SELECT…
    是一个所谓的subselect(请参阅),它是一个简单的
    SELECT
    ,您可以在查询中使用它的结果,如果它只有一列(因为我们只选择
    courseCode
    ),它可以用作
    的参数


  • 这句话的意思是什么?但是,如果我选择多媒体并注册,它将不再使用该课程填充框。因此,使用数据库中的当前数据(用户尚未注册任何一个可用课程),框中将填充两个课程。但是,如果用户决定参加多媒体与设计课程,下次填充该列表时,它将仅在框中显示数据结构课程。为此,您需要通过查询检查用户已注册的课程,然后在显示之前提取这些课程。如果您在下拉列表中未获得该列表,则说明您的查询有问题,您没有发布该问题。我不知道为什么你会在mysql问题上排除查询。我想说的是,重要的一点是不要使用最终会消失的API,因为你的代码会崩溃。不使用预先准备好的语句就可以编写完全安全且工作正常的代码,但当您的API消失后,同样的事情就不可能发生了。但当然,我同意,人们应该总是使用事先准备好的陈述。相应地更新了我的答案。
    // 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())
    // ...