0

mysql データベースには、5 つのテーブルが格納されています。データの保存と取得にphpを使用しています。これらの 5 つのテーブルの情報を取得/エコー/表示したいのですが、リンクされた方法で行います。academy_id各テーブルの外部キーとして持っています。各アカデミーには連絡担当者がいます。一部のアカデミーは、同じ担当者を共有している場合があります。しかし、各アカデミーを独自の情報で表示する方法がわかりません。これらの値をphp/mysql選択クエリで表示するにはどうすればよいですか?

Academy Name | MOU_ID | Academy_ID | STATUS | Academy Created | Course Name | Course Start Date | Instructor First Name | Contact First Name

テーブル

CREATE TABLE IF NOT EXISTS `academies` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(25) NOT NULL,
  `mou_id` int(11) default NULL,
  `academy_id` int(11) NOT NULL,
  `status` enum('INACTIVE','ACTIVE') NOT NULL default 'ACTIVE',
  `created_date` date NOT NULL
  PRIMARY KEY  (`id`)
);

INSERT INTO `courses` (`course_id`, `course_name`) VALUES
(1, 'MATH'),
(2, 'ENGLISH'),
(3, 'BIOLOGY'),

CREATE TABLE IF NOT EXISTS `academy_courses` (
  `unique_id` int(11) NOT NULL auto_increment,
  `academy_id` int(11) NOT NULL,
  `course_id` int(11) NOT NULL,
  `start_date` date default NULL,
  PRIMARY KEY  (`unique_id`),
  KEY `course_id` (`academy_id`,`course_id`)
);


CREATE TABLE IF NOT EXISTS `instructors` (
  `instructor_id` int(11) NOT NULL auto_increment,
  `academy_id` int(11) NOT NULL,
  `instructor_fname` varchar(50) NOT NULL
  PRIMARY KEY  (`instructor_id`),
  KEY `academy_id` (`academy_id`)
);


CREATE TABLE IF NOT EXISTS `main_contact` (
  `contact_id` int(11) NOT NULL auto_increment,
  `academy_id` int(11) NOT NULL,
  `contact_fname` varchar(50) NOT NULL,
  PRIMARY KEY  (`contact_id`),
  KEY `academy_id` (`academy_id`)
);

CREATE TABLE IF NOT EXISTS `main_contact_bridge` (
  `academy_id` int(11) NOT NULL,
  `contact_id` int(11) NOT NULL,
  PRIMARY KEY  (`contact_id`,`academy_id`),
  KEY `academy_id` (`academy_id`)
);
4

3 に答える 3

1

私なら、instructor_id を academy_courses に追加します。そうしないと、複数のインストラクターがいる場合、インストラクターごとに複製されたすべてのデータが取得されます。次に、次のようにします。

SELECT a.name AS 'Academy Name', 
       a.mou_id AS 
       a.academy_id
       a.status
       a.created_date AS 'Academy Created',
       c.course_name AS 'Course Name',
       ac.start_date AS 'Course Start Date',
       i.instructor_fname AS 'Instructor First Name',
       co.contact_fname AS 'Contact First Name'
FROM academies a
INNER JOIN academy_courses ac ON a.id = ac.academy_id
INNER JOIN courses c ON c.id = ac.course_id
INNER JOIN instructors i ON i.instructor_id = ac.instructor_id
INNER JOIN main_contact co ON co.academy_id = a.id

course/academy_courses/etc が存在しなくても Academy から情報を取得したい場合は、代わりに LEFT JOIN を記述できます。

于 2013-11-13T17:12:02.560 に答える
0

あなたが探しているのは、テーブルに参加することです。さまざまな種類の結合があります。この説明をご覧ください http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2013-11-13T16:38:24.420 に答える