Я пытаюсь сослаться на поле из первой таблицы выбора в третьей таблице выбора (подзапроса).
Однако это поле не распознается, когда оно переходит на этот подуровень запроса.
PHP-код, над которым я работаю, использует sql для возврата части команды sql (строки), которая будет использоваться в других местах.
Я придумал этот пример, который показывает вид вложенных запросов , которые я хочу решить.
Здесь я пытаюсь получить имя и адреса электронной почты пользователей, которые работают ночью и имеют соответствующий ранг для доступной вакансии:
tables -----------> fields
table_users -> [user_id, name, email, rank, ...]
table_users_jobs -> [user_id, job_id, period, ....]
table_jobs -> [job_id, status, rank, ...]
-- sql calling code -> $rank = "t1.rank"; get_users_info_by_rank($rank);
-- maybe using: SET @rank = NULL; SELECT @rank := $rank, t1.name, ...
SELECT t1.name, t1.email
FROM table_users as t1
WHERE t1.user_id IN (
SELECT t2.user_id
FROM table_users_jobs as t2
WHERE t2.period = 'night' AND
t2.job_id IN (
-- avaiable jobs to that rank -> get_job_ranks_sql($rank);
SELECT t3.job_id
FROM table_jobs as t3
-- maybe using: t3.rank = @rank
WHERE t3.rank = t1.rank AND
t3.status = 'avaiable_position')
)
Работая немного, я думаю, я мог бы избежать проблемы выбора 3-го уровня. Тем не менее, дело в том, что я пытаюсь повторно использовать sql код, подобный функции, которая дает мне job_id ранга, который я выбрал:
function get_job_ranks_sql($rank){
//probably 't3' will be renamed for something more unique
return 'SELECT t3.job_id
FROM table_jobs as t3
WHERE t3.rank = '.$rank.' AND
t3.status = "available_position")';
}
Даже используя php, я пытаюсь сделать его общим, если возможно, с другим языком.
Используемая версия sql - MySQL 5.1.41
На самом деле я думаю, что это возможно так, как я хочу, используя переменные sql , такие как @rank, но я не уверен, что это медленнее и есть ли другие лучшие способы для сделай это.
Заранее спасибо за любую помощь:)