MySQL选择逻辑

时间:2015-05-03 21:13:07

标签: php mysql database

所以我现在正在完成一项任务,我无法绕过逻辑。

我必须使用基于资格代码的课程列表填充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>");
}

数据库的布局如下

课程表: enter image description here

课程表: enter image description here

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

1 个答案:

答案 0 :(得分:0)

  1. 停止使用mysql_*,已弃用。请改为使用mysqli_*或PDO。
  2. 并非绝对必要,但您可能希望将排序规则从latin1_swedish_ci更改为utf8_general_ci,否则如果您决定在数据库中添加特殊字符,则会遇到问题。
  3. 现在,要真正解决您的问题:

    在你的问题中,你不能说出你的问题是什么,具体而言,但根据标题我假设你知道如何构建除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说明:

    我认为SELECTFROMWHERENOT无需解释。
    IN检查值是否在'A' IN ('A', 'B', 'C')之类的列表中 而(SELECT ...)是一个所谓的子选择(请参阅Subqueries),这是一个简单的SELECT,其结果可以在查询中使用,如果它只有一列(因为我们只选择courseCode),它可以用作IN的参数。