powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск через like сам в себе
8 сообщений из 8, страница 1 из 1
Поиск через like сам в себе
    #39940314
Glad_r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени всем.

Ситуация. Есть такой инструмент Testrail. По умолчанию там MySQL и обычное дерево.
Структура такова
Таблица milestones содержит список версий , значимые поля id int(11), name varchar(250).
На примере тестовых данных
id | name
1 | Version 1
2 | version 2
3 | version 3

Таблица  cases содержит список тестовых сценарий, значимые поля id int(11), milestone_id int(11), refs varchar(250), title varchar(250).
На примере тестовых данных
id | milestone_id | refs | title
1 | 1 | aaa | case 1
2 | 1 | aaa,bbb | case 2
3 | 2 | cccc | case 3
4 | 3 | bbb | case 4


Таблица cases связана с milestones через cases.milestone_id=milestones.id

Тестовые сценарии могут быть от разных версий. Однако, существуют сценарии, которые присуще двум и более версиям. При этом у сценариев остается только первоначальная версия и добавляется ссылка на требования (поле refs).

Без организации цикла как-то можно подзапросами выкрутится, чтобы найти те сценарии, у которых версия меньше чем нужна, однако есть ссылка на требования из нужной версии?

По шагам получается:
1) сначала можно получить список уникальных refs
select DISTINCT(refs) from cases where milestone_id in (select id FROM milestones where lower(name) like 'version%3%') and !ISNULL(refs)
2) затем выбрать все сценарии, у которых refs содержит данные из выборки 1, но имеет отличные версии
select * from cases where refs in (шаг 1) and milestone_id not in (select id FROM milestones where lower(name) like 'version%3%')

И тут главная проблема, что нужно не вхождение in, а поиск через like в цикле по данным из шага 1.
В результате нужна строка с ID 2.

Подскажите, как выкрутиться? Писать всё таки цикл или есть возможность через подзапрос это сделать.

Заранее благодарен.
...
Рейтинг: 0 / 0
Поиск через like сам в себе
    #39940375
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glad_r
как выкрутиться?
Наилучший выход - нормализовать данные и избавиться от CSV в поле refs .

Если структуру изменить невозможно, выкладывайте:

- CREATE TABLE обеих таблиц (лишние поля поскипать);
- INSERT INTO тестовых данных (ну хотя бы десяток записей);
- требуемый результат на именно этих данных.

Желательно пару-тройку (параметр-результат), моделирующих различные ситуации, если возможно. Ну и пояснения к тому,как получился именно такой результат, будут нелишними.

Да, версию сервера не забудьте озвучить.
...
Рейтинг: 0 / 0
Поиск через like сам в себе
    #39940408
Glad_r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер mysql-server 5.5.55-0+deb8u1.
Структуру изменить не получится. TestRail - продукт, который мы используем.

Структура
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE `cases` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
  `milestone_id` int(11) DEFAULT NULL,
  `refs` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`);



Код: sql
1.
2.
3.
4.
CREATE TABLE `milestones` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`);
...
Рейтинг: 0 / 0
Поиск через like сам в себе
    #39940455
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а тестовые данные, на которых можно пробовать решение - будут? в формате INSERT INTO...
...
Рейтинг: 0 / 0
Поиск через like сам в себе
    #39940470
Glad_r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Ну а тестовые данные, на которых можно пробовать решение - будут? в формате INSERT INTO...

Доброго времени.
Пожалуйста.
Только пока что нет ни каких предложений.

Код: sql
1.
2.
3.
4.
INSERT INTO milestones VALUES 
(1, 'Version 1'),
(2, 'version 2'),
(3, 'version 3');



Код: sql
1.
2.
3.
4.
5.
INSERT INTO cases VALUES
(1, 'case 1', 1, 'aaa'),
(2, 'case 2', 1, 'aaa,bbb'),
(3, 'case 3', 2, 'cccc'),
(4, 'case 4', 3, 'bbb');
...
Рейтинг: 0 / 0
Поиск через like сам в себе
    #39940498
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня, если я верно понял задачу (а она какая-то путаная и загадочная), получилось следующее:

Код: sql
1.
2.
3.
4.
5.
SELECT c2.* 
FROM milestones m
JOIN cases c1 ON m.id = c1.milestone_id
JOIN cases c2 ON FIND_IN_SET(c1.refs, c2.refs) AND c2.id != c1.id
WHERE m.name LIKE 'version%3%'



fiddle .

Есть, правда, нюанс - если в целевом refs окажется не одно значение, а несколько, получится фигня... я не зря просил смоделировать несколько возможных ситуаций.
...
Рейтинг: 0 / 0
Поиск через like сам в себе
    #39940509
Glad_r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
У меня, если я верно понял задачу (а она какая-то путаная и загадочная), получилось следующее:

Код: sql
1.
2.
3.
4.
5.
SELECT c2.* 
FROM milestones m
JOIN cases c1 ON m.id = c1.milestone_id
JOIN cases c2 ON FIND_IN_SET(c1.refs, c2.refs) AND c2.id != c1.id
WHERE m.name LIKE 'version%3%'



fiddle .

Есть, правда, нюанс - если в целевом refs окажется не одно значение, а несколько, получится фигня... я не зря просил смоделировать несколько возможных ситуаций.


Значений refs может быть до пяти!
...
Рейтинг: 0 / 0
Поиск через like сам в себе
    #39940536
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Збс... то есть в отобранном (с которым сверять) их может быть, скажем, 2, а в записи, которая в итоге выберется, скажем, 4? и что тогда сравнивать на вхождение - хотя бы один? обязательно оба? Русским же по белому пишу - "Желательно пару-тройку (параметр-результат), моделирующих различные ситуации, если возможно. Ну и пояснения к тому,как получился именно такой результат, будут нелишними.", - нет, блин, надо доить из тебя все условия по капле...

Лично мне - надоело. Пока не будет чёткой, полной и непротиворечивой постановки задачи - пусть кто-нибудь ещё помогает.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск через like сам в себе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]