Проблема выбора последней записи в JOIN - PullRequest
1 голос
/ 09 июля 2010

Это мои 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 ;

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

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

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`

* edit: ошибка - неизвестный столбец 'documents.Document_ID' в 'предложении where'

Ответы [ 3 ]

3 голосов
/ 09 июля 2010

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

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

Производная таблица / встроенное представление, называемое "x", является соединением с той же таблицей, и все, что она делает, это настраивает записи, поступающие из таблицы FILES, для достижения максимального значения file_document_id ...

0 голосов
/ 09 июля 2010

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

0 голосов
/ 09 июля 2010

Группировать не по file_id, а по File_documentid.

...