PHP MySQL缺少行(bug?)
从应答中添加另外两个连接将使查询不返回任何内容PHP MySQL缺少行(bug?),php,mysql,Php,Mysql,从应答中添加另外两个连接将使查询不返回任何内容 必须先运行子选择联接,然后再运行其他两个表的联接。然后,在与其他表的两个联接中,必须显式引用所需的表。所以在我的例子中,主选择是“tblname1 v”,然后次选择是“r”。然后您引用v.ID=othertbl.ID请尝试与左连接建立关系: LEFT JOIN (SELECT tblreview.AssistantIdentNumber, tblreview.AssistId, tblreview.Status, tblreview.Manag
必须先运行子选择联接,然后再运行其他两个表的联接。然后,在与其他表的两个联接中,必须显式引用所需的表。所以在我的例子中,主选择是“tblname1 v”,然后次选择是“r”。然后您引用v.ID=othertbl.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
选择
tblreview.assistantItemNumber,
tblreview.AssistID,
tblreview.状态,
tblreview.ReviewerId为RevID,
tblAssistant.Forename作为RevForename,
t lassistant.姓为revlasname,
tblreview.验证
来自tblreview
左连接tblreviewer
在tblreview.ReviewerID=tblreviewer.ReviewerID上
左连接tblAssistant
在tblAssistant.IdentNumber=tblreview.AssistantIdentNumber上
哪里
tblreview.Validation='Y'
和t lassistant。测试“Y”
年份(STR_TO_DATE(tblAssistant.DateDied,'%d/%m/%Y'))='2014'
月份(STR_TO_DATE(tblAssistant.DateDied,'%d/%m/%Y'))='9';
使用
左连接
而不是WHERE
。谢谢。工作完美。你能解释一下为什么它需要这个吗?请阅读这篇文章了解“where和join关系之间的区别”:谢谢。你能解释一下第三个连接是如何与其他所有连接集成的吗?
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';
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
}
}
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
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';