3番目の選択(サブクエリ)テーブルの1番目の選択テーブルからフィールドを参照しようとしています。 ただし、クエリのサブレベルに移動すると、そのフィールドは認識されません。 私が取り組んでいる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')
)
:ここで 私は名前と夜間の作業と一致するジョブ可能なジョブのランクを持っているユーザーの電子メールを取得しようとしています問題。
でも、私は多分にそれは一般的な作成しようとしているPHPを使用して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")';
}
:それでもポイントは、私は私に私が選んだランクのJOB_IDを与える関数のような再利用SQLコードにしようとしているということです可能であれば、別の言語で使用してください。使用 SQLバージョンは、MySQL 5.1.41で実際に私はそれがSQL変数 @rankなどを使用することによって、私が望むように可能だと思うが、私はそれが遅くなるかどうか分からないと
より良い他がある場合方法はです。 1つのコメンターが指摘したように任意の助けを事前に
感謝:)
インラインビュー(ネストされたselect文)を使用する理由はありますか?あなたは結合ですべてこれを行うことができます... – Nate
これは単なる例にすぎません。通常、それはずっと複雑で、最終的なSQLは、私がそこにputしたget_job_ranks_sqlのような中間にSQLを返すいくつかの関数を連結することによって形成されます。 – Seeker