Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
任务(父级)和任务实例(子级):使用PHP和MySQL从6个映像中选择1个?_Php_Mysql - Fatal编程技术网

任务(父级)和任务实例(子级):使用PHP和MySQL从6个映像中选择1个?

任务(父级)和任务实例(子级):使用PHP和MySQL从6个映像中选择1个?,php,mysql,Php,Mysql,我正在为一个显示页面编译一个带有附带HTML输出的MySQL查询,但希望得到一些指导。任何帮助都将不胜感激 背景: TaskInstance是子对象,Tasks和Student都是父对象。每当学生注册一项任务时,TaskInstance表将不断增长,但Tasks表的数量有限,例如20。每个任务都位于Tasks表中,并具有一些通用特性。用户可以注册一项任务,但是可以使用TaskInstance表为该任务分配唯一的质量。TaskInstance变量包括: TkinstanceInfo、Tkinst

我正在为一个显示页面编译一个带有附带HTML输出的MySQL查询,但希望得到一些指导。任何帮助都将不胜感激

背景: TaskInstance是子对象,Tasks和Student都是父对象。每当学生注册一项任务时,TaskInstance表将不断增长,但Tasks表的数量有限,例如20。每个任务都位于Tasks表中,并具有一些通用特性。用户可以注册一项任务,但是可以使用TaskInstance表为该任务分配唯一的质量。TaskInstance变量包括:

  • 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语句删除它来处理这个问题。这很有帮助。我想我对表格不熟悉