Mam następujący układ tabel:
CREATE TABLE `project` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`firm_id` INT(10) UNSIGNED NULL DEFAULT NULL,
`status` ENUM('active','notactive') NOT NULL DEFAULT 'notactive',
`price` SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
`title` VARCHAR(50) NOT NULL,
`url` VARCHAR(255) NOT NULL,
`description` TEXT NULL,
`start` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`end` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `FK_project_firm` (`firm_id`),
CONSTRAINT `FK_project_firm` FOREIGN KEY (`firm_id`) REFERENCES `firm` (`id`) ON UPDATE CASCADE ON DELETE SET NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=39
CREATE TABLE `image` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`project_id` INT(10) UNSIGNED NULL DEFAULT NULL,
`position` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
`date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `FK__project` (`project_id`),
INDEX `position` (`position`),
CONSTRAINT `FK__project` FOREIGN KEY (`project_id`) REFERENCES `project` (`id`) ON UPDATE CASCADE ON DELETE SET NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=25
Każdy projekt może mieć przypisane do siebie wiele zdjęć, zdjęcia mają swoją pozycję. Pozycja zdjęcia może ulegać zmianie. Chciałbym wyciągnąć z bazy wszystkie wpisy, gdzie status projektu jest równy active, posiada zdjęcie i dodatkowo chcę id zdjęcia o najniższej pozycji.
Całe złączenie mam, tylko nie wiem jak wymusić pobranie nie losowego zdjęcia z projektu, a tego który ma najniższą pozycję
SELECT
project.id,project.title, project.url, project.description, firm.name, image.id, image.position
FROM
project
LEFT JOIN firm ON project.firm_id = firm.id
JOIN image ON image.project_id = project.id
WHERE
project.STATUS = 'active'
ORDER BY
'end' DESC