2010-07-09 1 views
1

Это мои 2 таблицы:Проблема выбора последней записи в РЕГИСТРИРУЙТЕСЬ

CREATE TABLE `documents` (
    `Document_ID` int(10) NOT NULL auto_increment, 
    `Document_FolderID` int(10) NOT NULL, 
    `Document_Name` varchar(150) NOT NULL, 
    PRIMARY KEY (`Document_ID`), 
    KEY `Document_FolderID` (`Document_FolderID`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=331 ; 


CREATE TABLE `files` (
    `File_ID` int(10) NOT NULL auto_increment, 
    `File_DocumentID` int(10) NOT NULL, 
    `File_Name` varchar(255) NOT NULL, 
    PRIMARY KEY (`File_ID`), 
    KEY `File_DocumentID` (`File_DocumentID`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=333 ; 

Там может быть несколько файлов на 1 документ. Я пытаюсь сделать SELECT все документы с JOIN в таблице files, но я хочу только 1 запись файла, которая является последней.

Вот мой запрос, который я придумал, это не совсем работает, может ли кто-нибудь предложить правильный путь?

SELECT `documents`.* 
    FROM `documents` 
     INNER JOIN (
     SELECT MAX(`File_ID`), * 
     FROM `files` 
     WHERE `File_DocumentID` = `documents`.`Document_ID` 
     GROUP BY `File_ID`) AS `file1` 
     ON `documents`.`Document_ID` = `file1`.`File_DocumentID` 
    WHERE `documents`.`Document_FolderID` = 94 
    ORDER BY `documents`.`Document_Name` 

* Редактирование: ошибка Unknown столбца 'documents.Document_ID' в 'где предложение'

+0

Добавлено некоторое форматирование ... Кроме того, вы можете захотеть, чтобы изменения «не совсем работали» во что-то более полезное. – Amadan

ответ

3

Использование:

SELECT d.*, f.* 
    FROM DOCUMENTS d 
    JOIN FILES f ON f.file_document_id = d.document_id 
    JOIN (SELECT t.file_document_id, 
       MAX(t.file_id) AS max_file_id 
      FROM FILES t 
     GROUP BY t.file_document_id) x ON x.file_document_id = f.file_document_id 
            AND x.max_file_id = f.file_id 

Выведенного вид таблицы/рядный называется «х» является объединение в ту же таблицу, все это делает настройки записи, поступающую из таблицы файлов, чтобы быть самым высокими за file_document_id. ..

+0

Огромное спасибо! – fire

+0

там вы идете, с обледенением и сахаром! – fire

+0

@fire: Спасибо :) –

0

Не группировать по file_id, а File_documentid.

0

Я думаю, что вижу, что не так ... У вас есть GROUP BY File_ID, но я думаю, вы действительно хотите GROUP BY File_DocumentID.

+0

Спасибо, но я все еще получаю документы Unknown column 'document.Document_ID' в 'where clause' – fire

+0

@fire: Это потому, что вы пытаетесь использовать его в качестве коррелированного подзапроса в производном столе/встроенном представлении - не будет работать. –