快速提问。感觉像一个菜鸟,但尚未找到正确的语法。
有3张桌子。
T1- AsessessmentID(自动Incr) inspectorID, assistantID, 植物名称
T2- UserID(auto Incr), 用户名, 名称
T3- plantID(auto Incr) PlantName
基本上我想要一个与T1非常相似的php / mysql表,而不是列出ID我想要的名字。到目前为止,我的电话是:
SELECT DISTINCT a.AssessmentID, u.Name, a.PlantAssistID, p.PlantName
FROM assessmentscores AS a, user AS u, plant AS p
WHERE u.userID=a.InspectorID AND u.Name='$name' AND p.PlantID=a.Plant
这有效,因为u.Name会给我检查员的名字,但我无法弄清楚如何调用第二个(a.PlantAssistID)。只要保持两者的名称相同。
我应该使用什么样的服务器来返回两个不同的名字。任何帮助将不胜感激
答案 0 :(得分:2)
我不是百分百肯定我会关注你,但这就是我认为你想要的东西:
我会重写查询以使用JOIN,因为它可以更容易阅读
SELECT a.AssessmentID, u.Name, a.PlantAssistID, p.PlantName, u2.Name as AssisantName
FROM user AS u
JOIN assessmentscores AS a ON u.UserID = a.InspectorID
JOIN plant AS p ON p.plantID = a.Plant
JOIN user as u2 ON u2.UserID = a.assistantId
WHERE u.Name='$name'
这里的关键是重新加入用户表,但是给它一个不同的别名(这里是u2)
答案 1 :(得分:2)
首先要做的事情是:如果要从评估表中进行选择并使用其他表扩充结果集,请考虑使用LEFT JOIN
。如果您想要更严格的结果,只返回实际与现有用户相关联的评估,请改用INNER JOIN
。以下示例使用LEFT JOIN
。
不确定这是否是您想要的,但您可以尝试:
SELECT a.AssessmentID as a_id, u.Name as u_name, a.PlantAssistID as a_plantassistid, p.PlantName as p_plantname, uass.Name as u_ass_name
FROM assessmentscores a
LEFT JOIN user u ON u.UserID = a.AssessmentID
LEFT JOIN plant p ON p.PlantID = a.Plant
LEFT JOIN user uass ON uass.UserID = a.PlantAssistentID
结果:
array(
'a_id' => int /* AssessmentID */
'u_name' => string /* User name */
'a_plantassistid' => int /* Assessment.PlantAssistID */
'p_plantname' => string /* Plant name */
'u_ass_name' => string /* The user name of the user with assistent_id */
);