2015-02-13 3 views
0

Здравствуйте, у меня есть таблица со списком школьных курсов. (школьные школьные занятия) В таблицу входит внутренний стол с инструкторами, которые назначаются на этот курс (инструкторы).PHP/MySQL Запрос в запросе

До сих пор было легко.

Комплексная часть в том же запросе Мне нужно получить статус инструктора. Существует еще одна таблица под названием course_acceptance_history. Поэтому, когда инструктору назначается курс, он принимает курс. И он вставляет запись в course_acceptance_history.

Инсталлятор МОЖЕТ принять, а затем отказаться от курса, тогда другой инструктор может ПРИНИМАТЬ тот же курс. Итак, другими словами, у курса_acceptance_history может быть 10 записей для одного и того же курса.

Как выбрать запись MOST RECENT для курса из course_acceptance_history во время запроса, который получает все курсы?

Это то, что мой запрос выглядит, но я думаю, что я нужен вспомогательный запрос, чтобы тянуть только запись из course_acceptance_history с наибольшим ID для этого курса и инструктор ID

Пример

SELECT * FROM schoolcourses 

INNER JOIN instructors ON schoolcourses.courseinstructor = instructors.instructorsid 
INNER JOIN course_acceptance_history ON schoolcourses.schoolcoursesid = course_acceptance_history.courseid 

Я думаю Мне нужно объединить запрос выше

SELECT * FROM course_acceptance_history WHERE instructorid=$insid AND courseID=$courseID ORDERBY ID DESC 
+1

штампуются время акцепты или я ndexed как-то указать порядок входа? – ethrbunny

+0

Я бы просто добавил поле most_recent к курсу_acceptance_history :) При добавлении нового акцепта сначала установите most_recent = 0 для этого инструктора и курса, чем добавьте новую запись с most_recent = 1 –

+0

Надеюсь, вы абсолютно уверены, что ваши пользовательские параметры [правильно escaped] (http://bobby-tables.com/php), потому что данные '$ _POST' непосредственно в запросе создают гигантскую [SQL-инъекцию] (http://bobby-tables.com/). – tadman

ответ

0
SELECT * FROM schoolcourses 
    INNER JOIN instructors ON 
     schoolcourses.courseinstructor = instructors.instructorsid 
    INNER JOIN course_acceptance_history ON 
     schoolcourses.schoolcoursesid = course_acceptance_history.courseid 
WHERE course_acceptance_history.id = 
    (SELECT id 
     FROM course_acceptance_history 
     WHERE instructorid=instructors.id 
     AND courseID=schoolcourses.schoolcoursesid 
     ORDER BY ID DESC 
     LIMIT 1) 
+0

Я не на 100% уверен в именах ваших столбцов, поэтому вам может потребоваться отредактировать их, но вы получите общую идею, я надеюсь. – delatbabel

+0

Спасибо, деатвель. Однако, у меня есть вопрос. Я пытаюсь вывести список ВСЕХ запланированных курсов, которые будут в будущем, и показать статус приема (последнее). Итак, где бы я бросил это в WHERE coursedate> curdate – phpman13

+0

в конце вышеприведенного запроса, добавьте AND, а затем ваше дополнительное предложение where. например SELECT * FROM x WHERE a = 1 AND b = 2 – delatbabel

Смежные вопросы