私は仕事のために「仕事」テーブルを持っています。 システムには2種類のユーザーがあります。「Admin」と「Agent」はどちらも「Admin」と「Agents」という異なるテーブルに格納されています。Mysql IF条件付き同じテーブルを2回左に結合する
**Table Admin**
admin_id | 1
admin_name | John
admin_surname | Doe
**Table Agents**
agent_id | 1
agents_name | Sally
agents_surname | Zoe
また、他のユーザーのタスクやリクエストを追加できる「タスク」テーブルがあります。
**Table Tasks**
task_id | 1
task_inquirer_type | (1 if Admin, 2 if Agent)
task_inquirer_id | ID from related user table
task_assigned_type | (1 if Admin, 2 if Agent)
task_assigned_id | ID from related user table
task_text | text
私は、照会者と割り当てられたユーザーの名前と姓を取得するために管理者とエージェントのテーブルを結合して1 MySQLのクエリのすべてのレコードを取得しようとしています。
以下のSQLを使用すると、1人のユーザーのレコードを取得できます。
SELECT tasks.*,
admins.admin_name as inquirer_name, admins.admin_surname as inquirer_surname
FROM tasks
INNER JOIN admins on admins.admin_id = tasks.task_inquirer_id
WHERE tasks.task_inquirer_type = 1
AND task_assigned_id = 1 AND task_assigned_type = 1
UNION
SELECT tasks.*,
agents.agent_name as inquirer_name, agents.agent_surname as inquirer_surname
FROM tasks
INNER JOIN agents on agents.agent_id = tasks.task_inquirer_id
WHERE tasks.task_inquirer_type = 2
AND task_assigned_id = 1 AND task_assigned_type = 1
このクエリでは、ID(1)のAdmin(1)ユーザーに割り当てられたすべてのレコードを取得できます。しかし、私はすべてのレコードをリストし、すべての名前を "照会者"と "割り当てられた"リストに入れたい別のページを作っています。私は下の質問を試したが、何とかそれは私に間違った名前を与えたが、残りは大丈夫である。
SELECT tasks.*,
inquirer.admin_name as inquirername, inquirer.admin_surname as inquirersurname,
assigned.admin_name as assignedname, assigned.admin_surname as assignedsurname
FROM tasks
INNER JOIN admins AS inquirer on inquirer.admin_id = tasks.task_inquirer_id
INNER JOIN admins AS assigned on assigned.admin_id = tasks.task_assigned_id
WHERE tasks.task_inquirer_type = 1
UNION
SELECT tasks.*,
inquirer.agent_name as inquirername, inquirer.agent_surname as inquirersurname,
assigned.agent_name as assignedname, assigned.agent_surname as assignedsurname
FROM tasks
INNER JOIN agents AS inquirer on inquirer.agent_id = tasks.task_inquirer_id
INNER JOIN agents AS assigned on assigned.agent_id = tasks.task_assigned_id
WHERE tasks.task_inquirer_type = 2
どのように質問を処理する必要がありますか?私は両方のタイプを探す必要があることを知っています。「WHERE tasks.task_inquirer_type = 1 or 2」という1つのタイプだけではありません。 「WHERE tasks.task_assigned_type = 1 or 2」も問合せに含まれていなければなりません。
ありがとうございました。それをやっての
デザインを変更したほうが良いと私は同意しますが、データの一貫性を保証することはできません。トリガーを使用することができます。 – maraca
ありがとうございます。私はすでに過去数年間でうまく機能していた単一のユーザーテーブルバージョンと別のタスクテーブルを使用していますが、管理者、エージェント、ユーザーデータベースを別々にしなければなりませんでした。だから私はそれらを分離しておく必要があります。 – hakanerenler
ご覧のとおり、 'admin'テーブルと' agent'テーブルが非常に異なる場合に、 'tasks'テーブルを変更する方法についてのアドバイスもあります。 –