我的系统基于驾驶证申请。如果用户可以申请不同级别的许可证,例如,如果用户想申请5级许可证,他们必须具备2级和3级的先决条件。
在我的数据库中,我有两个相关的表,1是许可证,它存储用户已经申请或正在等待批准的所有许可证。另一个表格是许可证类型的说明,其中指出了用户可以申请的每个可用许可证及其先决条件和说明。
许可证(PID、EID、PTYPE、STATUS、DATETIMEAPP)
类型(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个许可证——1级、2级、3级。Cat 2PG、Cat 3PG、Car4PG、Cat 1OR、Cat 2OR、Cat 3OR、Cat 2TT和Cat 3TT。例如,Cat 3TT要求用户具有Cat 2TT和Cat 2PG。换句话说,Cat 3TT的先决条件是Cat 2TT和Cat 2PG。
我想使用PHP从数据库中提取所有所需的值,并对它们进行比较,看看用户是否满足了预先要求,然后允许他继续进行医学问卷调查(如果他得到了1)。
问题是:我不知道如何按逻辑编码,我试过了,但没有成功。希望对我的问题有更多的意见和解决方案。非常感谢。我们非常感谢您的帮助。
您只能在一个查询中检查先决条件:
$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;而且如果先决条件#1缺失则missing1
值为1并且如果先决前提#2缺失则missing2
值为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);