誰かが私が抱えているこの種の状況を経験したことを願っています。
ユーザーのmysqlデータベースがあり、複数のテーブルにデータがあります。
ローカル マシンでツールを使用してこの情報を照会し、ID 番号に基づいてユーザーをイベントにチェックインしています。
今後は、上記をそれぞれ「データベース」と「ローカル」で参照します。
複雑な内部結合のセットを使用して、データベースにクエリを実行し、必要なデータを取得できます。これを支援するために、私はビューを作成しました。
私のローカルは、このビューのコンパイルされたデータを問題なく読み取ることができます。
ここに私の問題があります。ローカルがこのデータセットのデータを変更したいと考えています。変更する 2 つのフィールドは現在存在しません。ローカル ツールは新しいエントリを作成できず、既存のエントリを更新/変更するだけです。
今、私が作成したビューでやりたいことができるとは思いません。必要に応じて変更できるように、2 つの新しいフィールドを含むこの結合されたデータをすべて保持する新しいテーブルを作成する必要があると考えています。1 回限りの同期であれば簡単ですが、もちろんそうではありません。
結合されたデータを定期的に表示し、それを使用して新しいテーブルを更新する必要があります。各行 (true/false) で 1 つのフィールドを更新するだけで済み、行を追加するだけで済みます。理想的には、削除された行を削除したいのですが、それはより困難になる可能性があります。
新しい静的テーブルのフィールドの更新に関しては、各行のフィールドを false に設定し、フィールドが true に設定されているすべての行をクエリして、静的テーブルのそれらのレコードを true に更新すると思います。
テーブルに新しいエントリを追加する場合は、すべてのレコードをクエリし、一意の識別子が最も高い行を確認してから、別のクエリを実行して、より高い uid を持つすべての行を選択します。
行の削除に関しては、私には手がかりがありません。
私は完全にベースから外れていて、この方法を必要以上に複雑にしていますか、それともこれを達成するためのより簡単な方法はありますか?
参照用のカスタム結合:
SELECT DISTINCT c.fullname AS name, usr.id, usr.username,
usr.firstname, usr.lastname, usr.email
FROM app_course AS c
INNER JOIN app_context AS cx ON c.id = cx.instanceid
INNER JOIN app_role_assignments AS ra ON cx.id = ra.contextid
INNER JOIN app_role AS r ON ra.roleid = r.id
INNER JOIN app_user AS usr ON ra.userid = usr.id
INNER JOIN app_user_enrolments AS enr ON usr.id = enr.userid