SELECT
tblassistant.identNumber,
tblreview.ReviewID,
tblreview.Status,
tblreview.AssistantId AS AssistID,
tblassistant.Forename AS AssistForename,
tblassistant.Surname AS AssistSurname,
tblreview.Validation
FROM tblreview, tblassistant
WHERE
tblreview.Validation = 'Y'
AND tblassistant.Test <> 'Y'
AND tblassistant.identNumber = tblreview.assistantidentNumber
AND YEAR(STR_TO_DATE(tblassistant.DateDied,'%d/%m/%Y')) = '2014'
AND MONTH(STR_TO_DATE(tblassistant.DateDied,'%d/%m/%Y')) = '9';
此查询使用 PHP 和 MySQL 工作台返回以下内容:
序列号 助理 ID 审阅者 ID 名字 姓氏状态验证
4144449170 55 46 杰西卡·布莱克 完整的 Y
4744443020 56 46 莫琳·
4744443620 57 46 莎拉·兰 完整 Y
4744440430 58 46 路易丝
·6144448966 59 48 菲奥娜·卢 完整 Y
4444443238 60 48 托尼·
4744442765 61 46 奥利维亚·戴维 完整 Y
但是,当我运行以下查询时:
SELECT
tblreview.AssistantIdentNumber,
tblreview.AssistID,
tblreview.Status,
tblreview.ReviewerId AS RevID,
tblAssistant.Forename AS RevForename,
tblAssistant.Surname AS RevSurname,
tblreview.Validation
FROM tblreview, tblreviewer, tblAssistant
WHERE
tblreview.ReviewerID = tblreviewer.ReviewerID
AND tblreview.Validation = 'Y'
AND tblAssistant.Test <> 'Y'
AND tblAssistant.IdentNumber = tblreview.AssistantIdentNumber
AND YEAR(STR_TO_DATE(tblAssistant.DateDied,'%d/%m/%Y')) = '2014'
AND MONTH(STR_TO_DATE(tblAssistant.DateDied,'%d/%m/%Y')) = '9';
仅退货:
PHP 中的 5 行
MySQL 工作台中的 7 行
它不返回 FREDA 和 ANTHONY 的记录,并且在查询末尾假脱机大量空格。
我已经尝试了 FOR 循环和 WHILE 循环
for($i=0;$i<$rowCount;$i++)
{
$row[$i]= mysql_fetch_array($ValidationPart);
// writes out HTML table
}
for($i=0;$i<$rowCount;$i++)
{
$row[$i]= mysql_fetch_array($ValidationPart);
if (empty($row[$i]['IdentNumber']))
{
//do nothing
} else {
// Prints out HTML table
}
}
我不得不匿名化很多,以便查询可能不匹配。但是,除了"tblreview.审阅者 ID = 审阅者。审阅者 ID"联接和随之而来的代码。
编辑:
情况变得更糟。这只是一个基本的测试查询。
有一个验证名称和一个经理名称。两者都需要返回到表中。审阅和验证的记录位于同一表中。
已经有一个连接是这样的:
LEFT JOIN
(SELECT tblreview.AssistantIdentNumber,
tblreview.AssistId,
tblreview.Status,
tblreview.ManagerId AS RevID,
tblreviewer.Forename AS RevForename,
tblreviewer.Surname AS RevSurname
FROM tblreview, tblreviewer
WHERE tblreview.ReviewerId = tblreviewer.ReviewerId
AND tblreview.Status = 'Complete'
AND IsNull(tblreview.Validation)) r
添加答案中的其他两个联接会使查询不返回任何内容。
必须首先运行子选择联接,然后运行其他两个联接到其他表。然后,在与其他表的两个联接中,您必须显式引用所需的表。所以在我的例子中,主选择有"tblname1 v",然后子选择是"r"。然后你引用 v.ID = othertbl.ID
请尝试与LEFT JOIN
建立关系:
SELECT
tblreview.AssistantIdentNumber,
tblreview.AssistID,
tblreview.Status,
tblreview.ReviewerId AS RevID,
tblAssistant.Forename AS RevForename,
tblAssistant.Surname AS RevSurname,
tblreview.Validation
FROM tblreview
LEFT JOIN tblreviewer
ON tblreview.ReviewerID = tblreviewer.ReviewerID
LEFT JOIN tblAssistant
ON tblAssistant.IdentNumber = tblreview.AssistantIdentNumber
WHERE
tblreview.Validation = 'Y'
AND tblAssistant.Test <> 'Y'
AND YEAR(STR_TO_DATE(tblAssistant.DateDied,'%d/%m/%Y')) = '2014'
AND MONTH(STR_TO_DATE(tblAssistant.DateDied,'%d/%m/%Y')) = '9';
阅读有关联接的更多信息。