私は、次の構造を有する:MySQLが垂直テーブルと水平参加
CREATE TABLE person {
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) NOT NULL UNIQUE
}
CREATE TABLE field {
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL
}
CREATE TABLE fieldPerson {
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
fieldId INT(11) UNSIGNED,
personId INT(11) UNSIGNED,
value VARCHAR(30) NOT NULL,
FOREIGN KEY (fieldId) REFERENCES field(id),
FOREIGN KEY (personId) REFERENCES person(id)
}
これがうまくまとめています。基本的にはデフォルトのフィールドname
とemail
があり、telephone
、address
などのカスタムフィールドを作成するオプションがあります。 nのフィールドがあります。私はSELECT
クエリを行う方法を見つけようとしていますが、サブクエリやデータベース外の余分な作業を使わずにすべてのフィールドを返すようにしています。
例(電話はカスタムフィールドです):
TABLE person:
id name email
1 Test 1 [email protected]
----
TABLE field:
id name
1 telephone
2 address
----
TABLE fieldPerson:
id fieldId personId value
1 1 1 +1 555 555 555
2 2 1 First St.
----
RESULTING QUERY
personId name email telephone Address
1 Test 1 [email protected] +1 555 555 555 First St.
が可能ということですか?
ありがとうございました。
EDIT:
ことができない場合は、あなたがが唯一のSQLで、サブクエリを使用して最適なソリューションを提案することができます。
しかし、私はJOINは避けられないと思います。 –
もちろん、JOINは大丈夫です。サブクエリ '(SELECT ...)AS ... 'に頼りにしたくないだけです。 –
いいえ、フィールドには名前列しかありません。私はそれの価値を集めて列名として使う必要があります。 –