mysql选择查询从同一用户名表调用名称的多个ID

时间:2011-08-16 19:55:18

标签: php mysql syntax

快速提问。感觉像一个菜鸟,但尚未找到正确的语法。

有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)。只要保持两者的名称相同。

我应该使用什么样的服务器来返回两个不同的名字。任何帮助将不胜感激

2 个答案:

答案 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 */
);