1

我的系统是基于驾驶执照申请。如果用户可以申请不同级别的许可证,例如用户要申请 5 级许可证,则必须具备 2 级和 3 级的先决条件。

在我的数据库中,我有 2 个相关表,1 个是存储用户已申请或正在等待批准的所有许可证的许可证。另一个表是许可证类型的描述,其中它指示用户可以申请的每个可用许可证及其先决条件和描述。

允许(PID、EID、PTYPE、状态、日期时间应用程序)

类型(TYID、PTYPE、PREREQ1、PREREQ2、REQEXP、DES)

我的计划是从数据库中检索数据

$query= "select PTYPE from permit where eid = $user"
$result = mysql_query($query, $conn);

将结果存储为数组

while ($row = mysql_fetch_assoc($result))
{
    $result_array[] = $row;
}

从类型表中检索先决条件

$query= "select PREREQ1 , PREREQ2 from type where TYID = $appliedPermit"
$result = mysql_query($query, $conn);

将 2 个结果与布尔值进行比较(我不知道如何编码)

如果结果为真,则继续,否则返回上一页并弹出一个通知用户他们尚未满足先决条件。(我知道我需要 if else 语句,但不知道如何编写条件)

你们认为我在正确的道路上吗?我不确定它是否会起作用......但希望这里的任何人有更好的建议。

稍微重构一下:

我的系统旨在让用户申请驾驶许可证...总共有 9 个许可证 - Class 1, Class 2, Class 3. Cat 2PG, Cat 3PG, Car4PG, Cat 1OR, Cat 2OR, Cat 3OR, Cat 2TT和猫 3TT。例如 Cat 3TT 要求用户拥有 Cat 2TT 和 Cat 2PG。也就是说,Cat 3TT 的先决条件是 Cat 2TT 和 Cat 2PG。

我想使用 PHP 从数据库中提取所有必需的值并比较它们以查看用户是否满足了先决条件,然后如果他得到 1,则允许他继续进行医疗问卷调查。

问题是:我不知道如何在逻辑上对其进行编码,我尝试过但没有奏效。希望能得到更多的意见和解决我的问题。非常感谢你。非常感谢您的帮助。

4

2 回答 2

2

您只能在一个查询中检查先决条件:

$query = "SELECT t.tyid, t.prereq1, t.prereq2
, (CASE WHEN (t.prereq1 IS NOT NULL) AND (p1.ptype IS NULL) THEN 1 ELSE 0 END) AS missing1
, (CASE WHEN (t.prereq2 IS NOT NULL) AND (p2.ptype IS NULL) THEN 1 ELSE 0 END) AS missing2
FROM type AS t
LEFT JOIN permit AS p1 ON (t.prereq1=p1.ptype) AND ( p1.eid = $user )
LEFT JOIN permit AS p2 ON (t.prereq2=p2.ptype) AND ( p2.eid = $user )
WHERE ( t.tyid IN (".implode(',', $appliedPermit).") )";

$result = mysql_query($query, $conn);
while ($row = mysql_fetch_assoc($result)) {
  echo "permit ".$row['tyid']. " : "
  echo "prerequisites = ".$row['prereq1'].", ".$row['prereq2'];
  if ( ($row['missing1']==1) && ($row['missing1']==1) ) {
    echo ", result = ok <br>";
  } else {
    echo ", result = failed <br>";
  }
}

此查询返回两个先决条件 id ;但missing1如果先决条件 #1 缺失,missing2则值为 1,如果先决条件 #2 缺失,则值为 1。

注意:我已经更新了我的帖子以回复您在下面的两条评论。

于 2012-04-03T21:44:16.740 回答
1

运行以下查询,然后将结果作为用户需要的先决条件打印给用户。

 SELECT prereq1, prereq2 from type 
 where tyid = $appliedPermit 
 and prereq1 not in (select  ptype from permit where eid = $user) 
 and prereq2 not in (select ptype from permit where eid= $user);
于 2012-04-03T21:52:32.123 回答