Основываясь на том, что у вас есть, я полагаю, что проекты могут иметь более одного подрядчика и подрядчиков может быть частью более чем одного проекта, имея это в виду, вот MySQL код для создания таблиц:
CREATE TABLE `projects` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`project` VARCHAR(60) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
CREATE TABLE `contractors` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(60) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
CREATE TABLE `project_contractors` (
`pid` INT(11) DEFAULT NULL,
`cid` INT(11) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=latin1
Вот запрос с джойн вернуть все записи:
SELECT *
FROM projects AS p
JOIN project_contractors AS pc
ON p.id = pc.pid
JOIN contractors AS c
ON pc.cid = c.id;
вы, возможно, потребуется добавить некоторые пункты, где и порядок по, если вы хотите, но если вы хотите, чтобы вернуть все, что Виль Я делаю это.
Вот некоторые для project_contractors таблицы:
pid cid
1 2
1 1
2 3
3 4
за столом подрядчиков:
id NAME
1 john
2 mike
3 dave
4 steve
для таблицы проектов:
id project
1 FIRST project
2 SECOND project
3 third project
и результат запроса:
id project pid cid id NAME
1 FIRST project 1 2 2 mike
1 FIRST project 1 1 1 john
2 SECOND project 2 3 3 dave
3 third project 3 4 4 steve
Я думаю, что это будет охватывать то, что вы искали, удачи!
Обратите внимание, что столбец id в «Менеджеры контрактов проектов» не имеет никакой цели. – Strawberry