さて、これは簡単な問題ですが、ソリューションの実装方法に問題があります。
したがって、データベース構造は次のようになりますが、必要なものはすべて大幅に削減されています。
テーブルイベント、連絡先、contact_event_role、event_roles。
create table events(
event_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
PRIMARY KEY(event_id)
);
INSERT INTO events VALUES(1, 'stackoverflow');
INSERT INTO events VALUES(2, 'throwsanerror');
create table contacts(
contact_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
fname VARCHAR(40) NOT NULL,
lname VARCHAR(40) NOT NULL,
email VARCHAR(90) NOT NULL,
PRIMARY KEY(contact_id)
);
INSERT INTO contacts VALUES(1, 'bill', 'smith', 'bsmith@email.com');
INSERT INTO contacts VALUES(2, 'amy', 'lee', 'amylee@email.com');
event_roles(
role_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
description VARCHAR(80),
PRIMARY KEY(role_id)
);
//The roles look something like this
INSERT INTO event_roles VALUES(1, 'Event Coordinator');
INSERT INTO event_roles VALUES(2, 'Decision Maker');
INSERT INTO event_roles VALUES(3, 'Inquiry Contact');
contacts_event_role(
event_id INTEGER UNSIGNED NOT NULL,
contact_id INTEGER UNSIGNED NOT NULL,
role_id INTEGER UNSIGNED NOT NULL,
FOREIGN KEY(event_id) REFERENCES events(event_id),
FOREIGN KEY(contact_id) REFERENCES contacts(contact_id),
FOREIGN KEY(role_id) REFERENCES event_roles(role_id),
PRIMARY KEY(event_id, role_id)
);
INSERT INTO event_role VALUES(1, 1, 1);
INSERT INTO event_role VALUES(1, 1, 2);
INSERT INTO event_role VALUES(2, 2, 1);
これがデータベースの要点です。ダミーデータが少しあります。すべてが順調に進んでいることを確認してください。
これが私の論理です
私がやろうとしているのは、クライアントとロールを挿入/更新し、必要に応じてクライアントに複数のロールを実行させることです。
だから私の擬似コードはこのようになります
//perform a check to see if the event_role is being filled...
check4role = SELECT * FROM contacts_event_role WHERE role_id = 1 AND event_id = 1
//perform a check to see if the contact already exists.
check4contact = SELECT * FROM contacts WHERE fname = :fname AND lname = :lname AND email = :email;
//if the role is already being filled && contact exists
if( check4role == true && check4contact == true)
UPDATE contact_event_role
//else if the role exists and contact does not exists
elseif( check4role == true && check4contact == false)
INSERT INTO contacts
UPDATE contact_event_role
//else if the role does not exists and the contact does exist
elseif( check4role == false && check4contact == true)
INSERT INTO contact_event_role
//else if the role does not exists and the contact does not exist
elseif( check4role == false && check4contact == false)
INSERT INTO contacts
INSERT INTO contact_event_role
あなたは私が何を確信していないか知っていますが、私はちょうど正しい論理を話したと思いますが、これがとにかくそれがどのように行われるべきか、または私の論理に欠陥があるかどうかについてのフィードバックに本当に興味があります。何かが足りないような気がします。
ありがとう!