MYSQL Как сохранить порядок второй таблицы в операции соединения? - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь создать поисковую систему для списков в моей базе данных.

Пользователь может ввести поисковый запрос, который затем будет разделен на слово за словом. Затем слова сопоставляются с их идентификаторами тегов в моей базе данных (тег - это всего лишь одно слово). Затем выполняется поиск в таблице ссылок для тегов и элементов списка для перечисления ID элементов и ListingID, которые содержат эти теги. Затем результаты сортируются по количеству тегов, которые содержит листинг (списки, которые содержат больше тегов, отображаются первыми). Наконец, данные листинга выбраны.

Моя проблема в том, что, когда я объединяю результаты идентификатора упорядоченного списка с таблицей списков, порядок списков стирается.

Я пытался изменить порядок две таблицы в операторе соединения, но я продолжал получать SQL ошибок.

SELECT * FROM listing
JOIN 
   (SELECT listingID
    FROM listing_item_tags
    JOIN (
        SELECT tagID FROM tags WHERE tagName IN ("2","1","4")
    ) as tagIds
    ON listing_item_tags.tagID = tagIds.tagID
    GROUP BY listingID
    ORDER BY COUNT(listingID) DESC
    ) AS ListingIDS
ON listing.listingID = ListingIDS.listingID

1 Ответ

2 голосов
/ 09 марта 2020

Что-то вроде этого должно быть достаточно ...

SELECT l.* 
  FROM listing l
  JOIN 
     ( SELECT listingID
            , COUNT(*) total
         FROM listing_item_tags lt
         JOIN tags t
           ON t.tagID = lt.tagID
        WHERE t.tagName IN (2,1,4)
        GROUP 
           BY listingID
      ) x
     ON ...
  ORDER  
     BY total DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...