Покажите только новую дату от таблицы MySQL, к которой присоединяются,

Я предложил бы использовать Метафон , не Soundex. Как отмечено, Soundex был разработан в 19-м веке для американских имен. Метафон даст Вам некоторые результаты при проверке работы плохих спеллеров, кто "выведывает его" и записывает фонетически.

расстояние Редактирования способно находить опечатки, такие как повторенные буквы, транспонированные буквы, или нажимать неправильную клавишу.

Рассматривают заявление для решения, который будет соответствовать пользователям best— или используйте обоих вместе с Метафоном, дополняющим предложения, произведенные Levenshtein.

Относительно исходного вопроса, я использовал n-граммы успешно в приложениях информационного поиска.

12
задан Jon Tackabury 2 September 2009 в 15:42
поделиться

5 ответов

Это можно сделать с помощью подзапроса:

SELECT d.docID, docTitle, c.dateAdded, c.content
FROM document d LEFT JOIN content c ON c.docID = d.docID
WHERE dateAdded IS NULL
    OR dateAdded = (
        SELECT MAX(dateAdded)
        FROM content c2
        WHERE c2.docID = d.docID
    )

Это известно как «групповой максимум» запрос

Изменить: запрос возвращал все строки документа, с NULL, если нет связанного содержимого.

29
ответ дан 2 December 2019 в 04:53
поделиться

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

SELECT t.docid, 
       t.docTitle, 
       mc.dateAdded, 
       mc.content
  FROM DOCUMENT t
  JOIN (SELECT c.docid,
               c.content,
               MAX(c.dateAdded)
          FROM CONTENT c
      GROUP BY c.docid, c.content) mc ON mc.docid = t.docid 
                                     AND mc.dateadded = t.dateadded

Это должно быть быстрее, чем коррелированный подзапрос.

Альтернатива, когда нет записей содержимого для документа:

   SELECT t.docid, 
          t.docTitle, 
          mc.dateAdded, 
          mc.content
     FROM DOCUMENT t
LEFT JOIN (SELECT c.docid,
                  c.content,
                  MAX(c.dateAdded)
             FROM CONTENT c
         GROUP BY c.docid, c.content) mc ON mc.docid = t.docid 
                                     AND mc.dateadded = t.dateadded
4
ответ дан 2 December 2019 в 04:53
поделиться

Не могли бы вы просто выполнить простое соединение, отсортировать по дате добавления и получить только первую запись?

SELECT docTable.docId, docTable.docTitle from docTable
INNER JOIN content ON content.docID = docTable.contentID
WHERE docTable.docId = <some id>
ORDER BY content.dateAdded DESC
0
ответ дан 2 December 2019 в 04:53
поделиться

Это 2 запроса решение:

Первый запрос:

select docID, max(dateadded) from [TblContent] group by docID

Второй запрос:

select [TblDocument].* from [TblDocument]  
inner join [TblDocument] on [TblDocument].[Docid]=[FirstQuery].[DocID]
-1
ответ дан 2 December 2019 в 04:53
поделиться

попробуйте следующее:

select d.id, d.docTitle, MAX(c.dateAdd)
from document_table d
left join content_table c
on d.id = c.docId
group by d.id

Вот что стоит за этим: предположим, документ таблица имеет запись A, относящуюся к содержимому (1, 2, 3, 4), и запись B, относящуюся к (5,

-1
ответ дан 2 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: