Как ВЫБРАТЬ из строки базы данных с запятыми - SQL - PullRequest
0 голосов
/ 02 мая 2020
            String name = null;
            String keyword2 = null;
            String author = "John";
            PreparedStatement stmt3 = DBM.conn.prepareStatement("SELECT * FROM `timelines` LEFT JOIN `users` ON users.UserID = timelines.TimelineOwner WHERE " +
                    " `TimelineName` = COALESCE(NULLIF(?, ''), `TimelineName`) AND `Keywords` = COALESCE(NULLIF(?, ''), `Keywords`) and `UserName` = COALESCE(NULLIF(?, ''), `UserName`);") ;
            stmt3.setString(1, name);
            stmt3.setString(2, keyword2);
            stmt3.setString(3, author);
            List<Timeline> list = DBM.getFromDB(stmt3, new Timeline());

Здесь выше мой поисковый запрос для базы данных MySQL, и все в порядке, за исключением одного дополнения, которое я хотел бы добавить, но я теряюсь в том, как его кодировать.

Дело в том, что ключевые слова хранятся в строке со сращенными запятыми в базе данных, и когда я изменяю параметр ключевого слова на, т. Е. «Рим», он должен возвращать эту временную шкалу, но это не так, потому что строка базы данных - это Рим, Цезарь, Солнце. ..... Как я могу добавить к запросу, чтобы, когда дело доходит до столбца Ключевые слова - он сравнивал параметр со словами по отдельности?

ОБНОВЛЕНИЕ: Может быть, я могу использовать FIND_IN_SET () и если возвратите, что больше 0, а затем вернуть его совпадение?

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Вы можете использовать FIND_IN_SET() следующим образом:

SELECT * 
FROM `timelines` 
LEFT JOIN `users` ON users.UserID = timelines.TimelineOwner 
WHERE `TimelineName` = COALESCE(NULLIF(?, ''), `TimelineName`) 
  AND FIND_IN_SET(COALESCE(NULLIF(?, ''), SUBSTRING_INDEX(`Keywords`, ',', 1), `Keywords`)
  AND `UserName` = COALESCE(NULLIF(?, ''), `UserName`);

или с оператором LIKE:

SELECT * 
FROM `timelines` 
LEFT JOIN `users` ON users.UserID = timelines.TimelineOwner 
WHERE `TimelineName` = COALESCE(NULLIF(?, ''), `TimelineName`) 
  AND CONCAT(',', `Keywords`, ',') LIKE CONCAT('%,', COALESCE(?, '%'), ',%')  
  AND `UserName` = COALESCE(NULLIF(?, ''), `UserName`);
0 голосов
/ 02 мая 2020

Вы можете использовать оператор SQL LIKE для поиска определенного ключевого слова c в строке через запятую:

SELECT * FROM 'timelimes' WHERE 'keywords' LIKE %Rome%

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...