任务(父级)和任务实例(子级):使用PHP和MySQL从6个映像中选择1个?
我正在为一个显示页面编译一个带有附带HTML输出的MySQL查询,但希望得到一些指导。任何帮助都将不胜感激 背景: TaskInstance是子对象,Tasks和Student都是父对象。每当学生注册一项任务时,TaskInstance表将不断增长,但Tasks表的数量有限,例如20。每个任务都位于Tasks表中,并具有一些通用特性。用户可以注册一项任务,但是可以使用TaskInstance表为该任务分配唯一的质量。TaskInstance变量包括:任务(父级)和任务实例(子级):使用PHP和MySQL从6个映像中选择1个?,php,mysql,Php,Mysql,我正在为一个显示页面编译一个带有附带HTML输出的MySQL查询,但希望得到一些指导。任何帮助都将不胜感激 背景: TaskInstance是子对象,Tasks和Student都是父对象。每当学生注册一项任务时,TaskInstance表将不断增长,但Tasks表的数量有限,例如20。每个任务都位于Tasks表中,并具有一些通用特性。用户可以注册一项任务,但是可以使用TaskInstance表为该任务分配唯一的质量。TaskInstance变量包括: TkinstanceInfo、Tkinst
- TkinstanceInfo、TkinstanceInfo、TkinstanceInfo、TkinstanceInfo允许各种描述等
- TkInstanceSide指示任务是在右侧、左侧完成,还是没有侧(L、R或null)
- fkTkID告诉我们哪个任务是TaskInstance的父任务
- fkStID告诉我们哪个学生是TaskInstance的家长
Students
1.) StID
2.) StNameFirst
3.) StNameLast
4.) StGender
5.) StPasscode
6.) fkProID
Tasks
1.) TkID
2.) TkSide (the task by nature has a side?: Y or N)
3.) TkImgML
4.) TkImgMR
5.) TkImgMC
6.) TkImgFL
7.) TkImgFR
8.) TkImgFC
9.) TkTitleSci
10.) TkTitleCom
11.) TkDesc
TaskInstance
1.) TkInstID
2.) TkInstSide (which side is the task?: L, R or null)
3.) TkInstInfoA
4.) TkInstInfoB
5.) TkInstInfoC
6.) TkInstInfoD
7.) TkInstCustomTitleSci
8.) TkInstCustomTitleCom
9.) TkInstCustomDesc
10.) TkInstOrder
11.) fkTkID
12.) fkStID
echo ‘<p>’ . $TkTitleCom . ‘<br>’; // show either standard title or custom title
echo $TkDesc . ‘<br>’; // show either standard description or custom description
echo $TkInstanceInfoA . ‘<br>’;
echo $TkInstanceInfoB . ‘<br>’;
echo $TkInstanceInfoC . ‘<br>’;
echo $TkInstanceInfoD . ‘<br>’;
echo $CorrectImg . ‘</p>’; // show either TkImgML, TkImgMR, TkImgMC, TkImgFL, TkImgFR or TkImgFC
MySQL:
Students
1.) StID
2.) StNameFirst
3.) StNameLast
4.) StGender
5.) StPasscode
6.) fkProID
Tasks
1.) TkID
2.) TkSide (the task by nature has a side?: Y or N)
3.) TkImgML
4.) TkImgMR
5.) TkImgMC
6.) TkImgFL
7.) TkImgFR
8.) TkImgFC
9.) TkTitleSci
10.) TkTitleCom
11.) TkDesc
TaskInstance
1.) TkInstID
2.) TkInstSide (which side is the task?: L, R or null)
3.) TkInstInfoA
4.) TkInstInfoB
5.) TkInstInfoC
6.) TkInstInfoD
7.) TkInstCustomTitleSci
8.) TkInstCustomTitleCom
9.) TkInstCustomDesc
10.) TkInstOrder
11.) fkTkID
12.) fkStID
echo ‘<p>’ . $TkTitleCom . ‘<br>’; // show either standard title or custom title
echo $TkDesc . ‘<br>’; // show either standard description or custom description
echo $TkInstanceInfoA . ‘<br>’;
echo $TkInstanceInfoB . ‘<br>’;
echo $TkInstanceInfoC . ‘<br>’;
echo $TkInstanceInfoD . ‘<br>’;
echo $CorrectImg . ‘</p>’; // show either TkImgML, TkImgMR, TkImgMC, TkImgFL, TkImgFR or TkImgFC
更新:2013年4月16日美国东部时间下午12:03:我将SELECT和SELECT大小写颠倒,缺少逗号。现在已更正,但仍处于中断状态:
$CurrentStID = 1; // known previously
$CurrentStGender = M; // known previously
SELECT *,
CASE StGender
WHEN 'M' THEN
CASE IFNULL(TkInstSide, 'C')
WHEN 'L' THEN TkImgML
WHEN 'R' THEN TkImgMR
ELSE TkImgMC
END
WHEN 'F' THEN
CASE IFNULL(TkInstSide, 'C')
WHEN 'L' THEN TkImgFL
WHEN 'R' THEN TkImgFR
ELSE TkImgFC
END
END TkImgCase,
CASE StTitlePref
WHEN 'Common' THEN
CASE WHEN TkInstCustomTitleCom IS NULL
THEN TkTitleCom
ELSE TkInstCustomTitleCom
END
WHEN 'Scientific' THEN
CASE WHEN TkInstCustomTitleSci IS NULL
THEN TkTitleSci
ELSE TkInstCustomTitleSci
END
END TkTitleCase
FROM TaskInstance
LEFT JOIN Tasks ON fkTkID = TkID
LEFT JOIN Students ON fkStID = StID
WHERE fkStID = $CurrentStID
ORDER BY TkInstOrder
打印:
Students
1.) StID
2.) StNameFirst
3.) StNameLast
4.) StGender
5.) StPasscode
6.) fkProID
Tasks
1.) TkID
2.) TkSide (the task by nature has a side?: Y or N)
3.) TkImgML
4.) TkImgMR
5.) TkImgMC
6.) TkImgFL
7.) TkImgFR
8.) TkImgFC
9.) TkTitleSci
10.) TkTitleCom
11.) TkDesc
TaskInstance
1.) TkInstID
2.) TkInstSide (which side is the task?: L, R or null)
3.) TkInstInfoA
4.) TkInstInfoB
5.) TkInstInfoC
6.) TkInstInfoD
7.) TkInstCustomTitleSci
8.) TkInstCustomTitleCom
9.) TkInstCustomDesc
10.) TkInstOrder
11.) fkTkID
12.) fkStID
echo ‘<p>’ . $TkTitleCom . ‘<br>’; // show either standard title or custom title
echo $TkDesc . ‘<br>’; // show either standard description or custom description
echo $TkInstanceInfoA . ‘<br>’;
echo $TkInstanceInfoB . ‘<br>’;
echo $TkInstanceInfoC . ‘<br>’;
echo $TkInstanceInfoD . ‘<br>’;
echo $CorrectImg . ‘</p>’; // show either TkImgML, TkImgMR, TkImgMC, TkImgFL, TkImgFR or TkImgFC
1.)检查自定义标题和说明,否则使用标准:
Students
1.) StID
2.) StNameFirst
3.) StNameLast
4.) StGender
5.) StPasscode
6.) fkProID
Tasks
1.) TkID
2.) TkSide (the task by nature has a side?: Y or N)
3.) TkImgML
4.) TkImgMR
5.) TkImgMC
6.) TkImgFL
7.) TkImgFR
8.) TkImgFC
9.) TkTitleSci
10.) TkTitleCom
11.) TkDesc
TaskInstance
1.) TkInstID
2.) TkInstSide (which side is the task?: L, R or null)
3.) TkInstInfoA
4.) TkInstInfoB
5.) TkInstInfoC
6.) TkInstInfoD
7.) TkInstCustomTitleSci
8.) TkInstCustomTitleCom
9.) TkInstCustomDesc
10.) TkInstOrder
11.) fkTkID
12.) fkStID
echo ‘<p>’ . $TkTitleCom . ‘<br>’; // show either standard title or custom title
echo $TkDesc . ‘<br>’; // show either standard description or custom description
echo $TkInstanceInfoA . ‘<br>’;
echo $TkInstanceInfoB . ‘<br>’;
echo $TkInstanceInfoC . ‘<br>’;
echo $TkInstanceInfoD . ‘<br>’;
echo $CorrectImg . ‘</p>’; // show either TkImgML, TkImgMR, TkImgMC, TkImgFL, TkImgFR or TkImgFC
更新:2013年4月16日美国东部时间上午11:52:我一直在挂上定制的标题。我的调整应该起作用吗?它似乎正在失败
if ($row['StTitlePref'] == "Common") && (strlen(trim($row['TkInstCustomTitleCom'])) > 0) { $TkTitle = $row['TkInstCustomTitleCom'] } // will be default or custom
else if ($row['StTitlePref'] == "Scientific") && (strlen(trim($row['TkInstCustomTitleSci']) > 0) { $TkTitle = $row['TkInstCustomTitleSci'] } // will be default or custom
2.)从六幅图像中选择一幅:
Students
1.) StID
2.) StNameFirst
3.) StNameLast
4.) StGender
5.) StPasscode
6.) fkProID
Tasks
1.) TkID
2.) TkSide (the task by nature has a side?: Y or N)
3.) TkImgML
4.) TkImgMR
5.) TkImgMC
6.) TkImgFL
7.) TkImgFR
8.) TkImgFC
9.) TkTitleSci
10.) TkTitleCom
11.) TkDesc
TaskInstance
1.) TkInstID
2.) TkInstSide (which side is the task?: L, R or null)
3.) TkInstInfoA
4.) TkInstInfoB
5.) TkInstInfoC
6.) TkInstInfoD
7.) TkInstCustomTitleSci
8.) TkInstCustomTitleCom
9.) TkInstCustomDesc
10.) TkInstOrder
11.) fkTkID
12.) fkStID
echo ‘<p>’ . $TkTitleCom . ‘<br>’; // show either standard title or custom title
echo $TkDesc . ‘<br>’; // show either standard description or custom description
echo $TkInstanceInfoA . ‘<br>’;
echo $TkInstanceInfoB . ‘<br>’;
echo $TkInstanceInfoC . ‘<br>’;
echo $TkInstanceInfoD . ‘<br>’;
echo $CorrectImg . ‘</p>’; // show either TkImgML, TkImgMR, TkImgMC, TkImgFL, TkImgFR or TkImgFC
使用MySQL来消除6个图像中的3个,然后使用PHP if/then来选择其余3个图像中的1个,这样好吗
如果学生性别(StGender)为男性,且任务有一个侧面(TkSide),则显示正确的图像:如果左侧(TkInstanceSide),则显示L男性图像(TkImgML);如果是R侧(TkInstanceSide),则显示R男性图像(TkImgMR)。如果学生性别(StGender)为男性,且任务没有边(TkSide)[同时TkInstanceSide为空],则显示中心男性图像(TkImgMC)
如果学生的性别(StGender)是女性,并且任务有一个侧面(TkSide),则显示正确的图像:如果L面(TkInstanceSide),则显示L女性图像(TkImgFL);如果是R侧(TkInstanceSide),则显示R女性图像(TkImgFR)。如果学生的性别(StGender)是女性,并且任务没有边(TkSide)[同时TkInstanceSide为空],则显示中心女性图像(TkImgFC)
3.)显示与此实例相关的其他信息:
Students
1.) StID
2.) StNameFirst
3.) StNameLast
4.) StGender
5.) StPasscode
6.) fkProID
Tasks
1.) TkID
2.) TkSide (the task by nature has a side?: Y or N)
3.) TkImgML
4.) TkImgMR
5.) TkImgMC
6.) TkImgFL
7.) TkImgFR
8.) TkImgFC
9.) TkTitleSci
10.) TkTitleCom
11.) TkDesc
TaskInstance
1.) TkInstID
2.) TkInstSide (which side is the task?: L, R or null)
3.) TkInstInfoA
4.) TkInstInfoB
5.) TkInstInfoC
6.) TkInstInfoD
7.) TkInstCustomTitleSci
8.) TkInstCustomTitleCom
9.) TkInstCustomDesc
10.) TkInstOrder
11.) fkTkID
12.) fkStID
echo ‘<p>’ . $TkTitleCom . ‘<br>’; // show either standard title or custom title
echo $TkDesc . ‘<br>’; // show either standard description or custom description
echo $TkInstanceInfoA . ‘<br>’;
echo $TkInstanceInfoB . ‘<br>’;
echo $TkInstanceInfoC . ‘<br>’;
echo $TkInstanceInfoD . ‘<br>’;
echo $CorrectImg . ‘</p>’; // show either TkImgML, TkImgMR, TkImgMC, TkImgFL, TkImgFR or TkImgFC
显示这4个变量:TkinstanceInfo、TkinstanceInfo、TkinstanceInfo、TkinstanceInfo
所以,最终是这样的:
Students
1.) StID
2.) StNameFirst
3.) StNameLast
4.) StGender
5.) StPasscode
6.) fkProID
Tasks
1.) TkID
2.) TkSide (the task by nature has a side?: Y or N)
3.) TkImgML
4.) TkImgMR
5.) TkImgMC
6.) TkImgFL
7.) TkImgFR
8.) TkImgFC
9.) TkTitleSci
10.) TkTitleCom
11.) TkDesc
TaskInstance
1.) TkInstID
2.) TkInstSide (which side is the task?: L, R or null)
3.) TkInstInfoA
4.) TkInstInfoB
5.) TkInstInfoC
6.) TkInstInfoD
7.) TkInstCustomTitleSci
8.) TkInstCustomTitleCom
9.) TkInstCustomDesc
10.) TkInstOrder
11.) fkTkID
12.) fkStID
echo ‘<p>’ . $TkTitleCom . ‘<br>’; // show either standard title or custom title
echo $TkDesc . ‘<br>’; // show either standard description or custom description
echo $TkInstanceInfoA . ‘<br>’;
echo $TkInstanceInfoB . ‘<br>’;
echo $TkInstanceInfoC . ‘<br>’;
echo $TkInstanceInfoD . ‘<br>’;
echo $CorrectImg . ‘</p>’; // show either TkImgML, TkImgMR, TkImgMC, TkImgFL, TkImgFR or TkImgFC
(1)打印
if (strlen(trim($TkInstCustomTitleCom)) > 0) $tkTitleCom = $tkInstCustomTitleCom;
echo $tkTitleCom; // will be default or custom
(2)打印
if (strlen(trim($TkInstCustomTitleCom)) > 0) $tkTitleCom = $tkInstCustomTitleCom;
echo $tkTitleCom; // will be default or custom
如果。。。否则;(括号)内的表达式称为三元运算符
,第2行中的表达式为变量
:
$image = "TkImg" . $StGender . ($TkSide=='Y'?$TkInstanceSide:'C');
$imagename = $$image; // now $imagename contains the content of e.g. $TkImgMC
看到它工作了吗:(1)打印
if (strlen(trim($TkInstCustomTitleCom)) > 0) $tkTitleCom = $tkInstCustomTitleCom;
echo $tkTitleCom; // will be default or custom
(2)打印
if (strlen(trim($TkInstCustomTitleCom)) > 0) $tkTitleCom = $tkInstCustomTitleCom;
echo $tkTitleCom; // will be default or custom
如果。。。否则;(括号)内的表达式称为三元运算符
,第2行中的表达式为变量
:
$image = "TkImg" . $StGender . ($TkSide=='Y'?$TkInstanceSide:'C');
$imagename = $$image; // now $imagename contains the content of e.g. $TkImgMC
查看是否正常工作:您可以在SQL中根据性别和侧边选择图像:
SELECT *,
CASE StGender
WHEN 'M' THEN
CASE IFNULL(TkSide, 'C')
WHEN 'L' THEN TkImgML
WHEN 'R' THEN TkImgMR
ELSE TkImgMC
END
WHEN 'F' THEN
CASE IFNULL(TkSide, 'C')
WHEN 'L' THEN TkImgFL
WHEN 'R' THEN TkImgFR
ELSE TkImgFC
END
END TkImg
FROM TaskInstance
LEFT JOIN Tasks ON fkTkID = TkID
LEFT JOIN Students ON fkStID = StID
WHERE fkStID = $CurrentStID
ORDER BY TkInstOrder
对后续行动的答复:
有两种方法可以做到这一点。一种是保留当前的两级CASE结构,但将列名替换为用PHP变量填充的文本(CASE语句中允许使用任何表达式,因此文本与列名一样好):
另一种方法利用了列遵循命名约定这一事实,因此您可以直接插入到列名中:
$titleAbbrev = substr($CurrentStTitlePref, 0, 3);
if ($result = $mysqli->query("
SELECT *,
CASE WHEN TkSide == 'Y' THEN TkImg{$CurrentStGender}L
ELSE TkImg{$CurrentStGender}C
END TkImgCase,
TkTitle{$titleAbbrev} TkTitleCase
FROM Tasks");
您可以在SQL中根据性别和侧边选择图像:
SELECT *,
CASE StGender
WHEN 'M' THEN
CASE IFNULL(TkSide, 'C')
WHEN 'L' THEN TkImgML
WHEN 'R' THEN TkImgMR
ELSE TkImgMC
END
WHEN 'F' THEN
CASE IFNULL(TkSide, 'C')
WHEN 'L' THEN TkImgFL
WHEN 'R' THEN TkImgFR
ELSE TkImgFC
END
END TkImg
FROM TaskInstance
LEFT JOIN Tasks ON fkTkID = TkID
LEFT JOIN Students ON fkStID = StID
WHERE fkStID = $CurrentStID
ORDER BY TkInstOrder
对后续行动的答复:
有两种方法可以做到这一点。一种是保留当前的两级CASE结构,但将列名替换为用PHP变量填充的文本(CASE语句中允许使用任何表达式,因此文本与列名一样好):
另一种方法利用了列遵循命名约定这一事实,因此您可以直接插入到列名中:
$titleAbbrev = substr($CurrentStTitlePref, 0, 3);
if ($result = $mysqli->query("
SELECT *,
CASE WHEN TkSide == 'Y' THEN TkImg{$CurrentStGender}L
ELSE TkImg{$CurrentStGender}C
END TkImgCase,
TkTitle{$titleAbbrev} TkTitleCase
FROM Tasks");
SQL
$sql = <<<SQL
SELECT *
FROM TaskInstance
LEFT JOIN Tasks ON fkTkID = TkID
WHERE fkStID = :stID
ORDER BY TkInstOrder
SQL;
:stID
是一个参数,查询是一个参数化查询。它对SQL注入是安全的。您将使用PDO函数,而不是mysql_*函数(不推荐使用)
我认为这应该可以解决问题。SQL
$sql = <<<SQL
SELECT *
FROM TaskInstance
LEFT JOIN Tasks ON fkTkID = TkID
WHERE fkStID = :stID
ORDER BY TkInstOrder
SQL;
:stID
是一个参数,查询是一个参数化查询。它对SQL注入是安全的。您将使用PDO函数,而不是mysql_*函数(不推荐使用)
我想这应该行。这是你的作业吗?不,我不是学生。这是我正在做的一个项目,当它完成时,是为了帮助学生。好的,你的问题是什么?你能让我开始使用MySQL代码来正确排列数据吗?我尝试了一下,但不知道我的内部连接。类似地,我希望开始使用IF/THEN/ELSE PHP语句,以获得正确的图像(第1页,共6页)。我不确定我是通过在SQL中删除它还是通过if/THEN语句删除它来处理这个问题。这是你的家庭作业吗?不,我不是学生。这是我正在做的一个项目,当它完成时,是为了帮助学生。好的,你的问题是什么?你能让我开始使用MySQL代码来正确排列数据吗?我尝试了一下,但不知道我的内部连接。类似地,我希望开始使用IF/THEN/ELSE PHP语句,以获得正确的图像(第1页,共6页)。我不确定是通过在SQL中删除它还是通过if/THEN语句删除它来处理这个问题。这很有帮助。我想我对表格不熟悉