MySQL запрос выбора для нескольких идентификаторов, которые называют имя из одной и той же таблицы имени пользователя - PullRequest
1 голос
/ 16 августа 2011

Быстрый вопрос. чувствую себя нубом, но еще не нашел правильный синтаксис для этого.

3 таблицы.

T1- AsessessmentID (авто Incr) inspectorID, assistantID, название растения

T2- UserID (авто Incr), имя пользователя, Имя

T3- PlantID (авто Incr) PlantName

По сути, я хочу иметь таблицу php / mysql, которая очень похожа на T1, но вместо перечисления идентификаторов мне нужны имена. Вот мой звонок до сих пор:

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 ]

2 голосов
/ 17 августа 2011

Перво-наперво: если вы хотите выбрать из оценочной таблицы и дополнить набор результатов, используя другие таблицы, подумайте об использовании 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 */
);
2 голосов
/ 17 августа 2011

Я не уверен на 100%, что следую за тобой, но вот что, я думаю, ты хочешь:

Я бы переписал запрос для использования 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 здесь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...