powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
88 сообщений из 88, показаны все 4 страниц
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38773905
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоит следующая задача: перемножить все имеющиеся варианты слов между
собой.

У меня есть текст в таблице, где каждое слово в отдельной строке

Студент
бежит
к
речке


Есть варианты слов в таблице:

для глаголов
бежит
ползет
тащится

Существительных
речке
озеру
морю

В итоге надо получить:

Студент бежит к речке
Студент ползет к речке
Студент тащится к речке
Студент бежит к озеру
Студент ползет к озеру
Студент тащится к озеру
Студент бежит к морю
Студент ползет к морю
Студент тащится к морю

Причем именно в виде предложений. Подскажите, пожалуйста, как?

Таблицы я сделала как:

Главная с предложением:
Id Id_Word Id_WordClass
1 1 5
2 2 1
3 2 5
4 1 2

C Id_WordClass = 5 - это неизменяемы слова. С Id_WordClass = 1 - глаголы.
Id_WordClass = 2 - существительные

В самих таблицах:
Id_Word Word
1 бежит
2 ползет
3 тащится

И также для существительных такую же стурктуру сделала. А как дальше писать джойны и главное, сделать слияние, чтобы не слились в одну строчку вообще все слова?
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38774079
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,

1. пример соития строковых констант и переменых:
select concat('a',' и ','б',' сидели на ','трубе') from dual

2. есть также более хитрый оператор group_concat
который "склеит" значения из разных записей

3. Как сейчас поставлена, ваша задача не решается
средствами чистого SQL-а. Если что-то изменится
в предложении -- например к речке будет ползти
"Удав" или к морю побежит "Аспирант" то придется делать
еше один джоин на выборку (Удав, Студент, Аспирант).
Фактически, нужно будет строить и выполнять СКЛ
на лету. Это вполне возможно внутри "хранимой процедуры"
или даже проще на джаве, руби, c#, etc.

4. конкретно как есть сейчас, решение будет:

http://sqlfiddle.com/#!2/713b5c/9
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38774084
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, в предыдушем решении
таблица Сентенсе даже лишняя,
результат зачетверился неподеЦки.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38774107
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Это жестко зашито на определенные id, как я понимаю? Свой пример я упростила, там будет не одна запись про студента, а много разных. Какого нибудь full join в mysql нет? Чтобы все же соединять по таблицам не зная точных id.
Хотелось бы, конечно, решить задачу на чистом sql.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38774134
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,

да, как вы поставили задачу снача -- надо
чисто зашивать связки заранее.
Попробуйте переформулировать задачу
ближе к реальной.

Основная проблема -- чистый СКЛ не
подойдет если заранее вы не знаете какие
и сколько связок (джоинтов) будет в запросе.

>> Это жестко зашито на определенные id, как я понимаю?

В примере я жестко зашил две связки на Fixed на
два зашитых ИД.
То что связок зашиты -- этого не избежать (на чистом СКЛ)
а вот ИД -- наверное -- можно динамически вылавливать из
таблицы Сентенсе -- которая может работать как темплейт.

Опятьже -- раскрывайте реальную задачу,
"будем посмотреть"
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38774272
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Здравствуйте. Реальная задача такая же, там у меня только сложней структура.
Смысл - получить несколько произвольных предложений из кучи всех возможных. Я подумала, что сделать сразу все и потом выбрать из них нужное количество указав Limit будет лучше, чем вызывать одну процедуру несколька раз.

Основная таблица - tbl_detail
В ней id слова и id его типа + еще куча разных настроек, уточняющих для выбора слова.

Самих слов и их типов может быть много, до 100 на одно предложение, поэтому фиксированное значение я использовать не смогла бы. (((

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

Или сделать функцию, которая выбирала бы одно произвольное слово из кучи и Group_Concat ее и остальные значения

select group_concat (Word, my_function_noun(id_word), my_function_verb(id_word) from
tbl_detail where Id_Sentence 3 - как-то вот так.

Нужно наиболее производительное решение.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38774660
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskjavajdbc,

Здравствуйте. Реальная задача такая же, там у меня только сложней структура.
Смысл - получить несколько произвольных предложений из кучи всех возможных. Я подумала, что сделать сразу все и потом выбрать из них нужное количество указав Limit будет лучше, чем вызывать одну процедуру несколька раз.

Основная таблица - tbl_detail
В ней id слова и id его типа + еще куча разных настроек, уточняющих для выбора слова.

Самих слов и их типов может быть много, до 100 на одно предложение, поэтому фиксированное значение я использовать не смогла бы. (((

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

Или сделать функцию, которая выбирала бы одно произвольное слово из кучи и Group_Concat ее и остальные значения

select group_concat (Word, my_function_noun(id_word), my_function_verb(id_word) from
tbl_detail where Id_Sentence 3 - как-то вот так.

Нужно наиболее производительное решение.

чтобы что-то ускорять надо сделать хоть одно
логически правильное работаюшее решение.

Например, сделайте решение полностью на
языке C#, Java, perl или что вы еще знаете?
Когда надо -- обрашайтесь к базе за набором
слов одного типа. Слысл -- в отработке алгаритма
на языке высогоко уровня а не в скорости.

Испоользование временых таблиц или массивов
языка програмирования -- на ваш вкус

Затем этот алгоритм можно переделать (или сразу писать)
на язык хранимых процедур. Здесь использование
временых таблиц приветствуется

Затем можно попробовать написать кодо-генератор который
по заданых значениям (конкретная структура предложения)
сгенерирует громадный СКЛ и вот он и может быть
самым быстрым.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38774893
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Здравствуйте. Извините, пожалуйста, но почему это решение неправильное? Структуру я могу поменять как угодно, почему сделать полность на sql, это ошибка? хочется написать процедуру, передать ей параметр и получить результат.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38775013
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskпочему это решение неправильное?потому что в скле соединяются таблицы, причём заранее известно, какие с какими
у вас же количество соединений (о чём уже сказали выше) зависит от количества записей таблицах (по крайней мере в одной из них)
ElenaTomskхочется написать процедуру, передать ей параметр и получить результат
Нужно наиболее производительное решениеДа не вопрос
http://sqlfiddle.com/#!2/cd81a0/11
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 
concat(
 "select concat_ws(',',"
 ,group_concat(concat(
    case id_wordclass when 1 then 'verb' when 2 then 'noun' else 'fixed' end
    ,id
    ,'.word')
  order by id)
 ,") as res from (select null from dual) ddd"
 ,group_concat(concat(
    " cross join "
    ,case id_wordclass when 1 then 'verb verb' when 2 then 'noun noun' else 'fixed fixed' end
    ,id)
  order by id)
 ," order by чего-нибудь limit 10") as prep_st
from sentence where Id_Sentence=3

получаем текст запроса, потом prepare+execute
При желании можно и от хардкода в виде этих verb/noun в case-ах избавиться, надо будет завести ещё одну табличку с именами словарных таблиц
ElenaTomskС Id_WordClass = 1 - глаголы.
Id_WordClass = 2 - существительныеidtablename1verb2noun5fixedну и запрос допилить соответствующим образом.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38775523
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> ElenaTomsk

>> Здравствуйте. Извините, пожалуйста, но почему это решение неправильное?
>> Структуру я могу поменять как угодно, почему сделать полность на sql,
>> это ошибка?

Как уж сказал tanglir -- чистый СКЛ требует что бы
все связки-жоинты были зафиксированы заранее.

>> хочется написать процедуру, передать ей параметр и получить результат.

А вот сделать эту задачу на "процедурном СКЛе" --
конечно возможно и нужно -- опятьже tanglir показал вариант.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38776628
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Здравствуйте. таблица со спискм слов у меня уже есть. Я ваш код поменяла по своему разуменю, он не работал. Получается вот так:

Тогда в одной строке в первой сразу видно что студент встречается дважды, это не правильно. У меня еще в таблице деталей, основная которая, есть поле OrderWord, в нем хранится порядок, на каком месте слово в предложении. Только даже если сортировать по нему, то все равно будут два студента. :(
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38776648
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskв нем хранится порядок, на каком месте слово в предложенииЯ думал, порядок слов задаётся в sentence.id, но там нигде нет указания, что на месте А с кодом 5(т.е. фиксированное) должно стоять именно слово Б, а не В, Г или Ё. Поэтому генерируются все возможные сочетания. Если у вас это всё-таки где-то задаётся, показывайте уже структуру. Настоящую, а не огрызки. И условие уточните, потому что если исходить из данных приведённой таблицы sentence, то мой вариант вполне себе правильный.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778024
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirпоказывайте уже структуру. Настоящую, а не огрызки. И условие уточните, потому что если исходить из данных приведённой таблицы sentence, то мой вариант вполне себе правильный.

Здравствуйте. Вот это будет практически полноценная структура, убрала только кучу незначащих здесь полей наподобией всех свойств глагола и тому подобного.

С огромным удовольствием и благодарностью распишу еще если что-то нужно!
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778052
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,

1. более стандартным является суффих _id
а не префикс id_

2. попробуйте поместить ВСЕ слова в ОДНУ
таблицу и добавить поле typeword со значениями
'verb','fixed','adject'.... и.т.д. ну или
форенд-ки ИД на таблицу typeword

3. соответсвено таблица связок тоже будет одна.

4. далее, в какой таблице лежит шаблон ?
Каким образом из входных параметров (3, "для студентов")
получается цепочка 1,3,7,10,14 ?

авторВ итоге выбирается произвольный id - например, 3.
Далее выбирается тип предложения - "для студентов".

Получается некоторый шаблон получается:

1 - глагол
3 - знак препинания
7 - прилагательное
10 - существительное
14 - фиксированное слово

5. Что такое ID_PARENT=3 ? понятно что это заданое значение,
но для какой таблицы?

6. каким образом в результируюшей таблице
полился порадок которым мы наблюдаем?
Порядо типов слов получились 14,3,10,3,1,14,14 --
это никак не похоже на шаблон типов 1,3,7,10,14

7. Вам бы человека сначала нанять на написание
бизнесс задачи, а уж потом в СКЛ идти.
Ничего личного, я понимаю что задача интересная и
"кудато полезная", но куда она лезет --- сложно понять :-)
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778321
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте

javajdbcElenaTomsk,
2. попробуйте поместить ВСЕ слова в ОДНУ
таблицу и добавить поле typeword со значениями
'verb','fixed','adject'.... и.т.д. ну или
форенд-ки ИД на таблицу typeword


Я думала об этом. С одной стороны, оно упростит выборку, с другой - создаст кучу ненужных индексов. Общее число слов около 70 тысяч. При этом изменяемых среди них около 2 тысяч. А нужны будут индексы по всем свойствам глаголов, по всем свойствам прилагательных, существительных и еще индекс для поля, изменяемое это слово или нет.
И еще будет куча ненужных полей в таблице, глаголов меньше всего, а свойств у них больше всего.

javajdbc4. далее, в какой таблице лежит шаблон ?


есть сам текст, он лежит в таблице parent, есть он же, уже разбитый по словам и их типам, это в таблице detail

javajdbcКаким образом из входных параметров (3, "для студентов")
получается цепочка 1,3,7,10,14 ?


автоматически определятся по наличию слова в определенной таблице.

1 - глагол
3 - знак препинания
7 - прилагательное
10 - существительное
14 - фиксированное слово[/quot]

javajdbc5. Что такое ID_PARENT=3 ? понятно что это заданое значение,
но для какой таблицы?


Как я уже говорила выше лежит таблица parent, в которой образец "Студент идет к морю". Далее этот образец автоматически распознается и ложиться уже в таблицу detail. основная работа идет с ней.

javajdbc6. каким образом в результируюшей таблице
полился порадок которым мы наблюдаем?
Порядо типов слов получились 14,3,10,3,1,14,14 --
это никак не похоже на шаблон типов 1,3,7,10,14


Это не порядок слов. Порядок определятся в positionword. "14,3,10,3,1,14,14" - это типы слов,
1 - глагол
3 - знак препинания
7 - прилагательное
10 - существительное
14 - фиксированное слово

Получается так:
Неизменяемое
знак препинания
изменяемое существительное
знак препинания
глагол
Неизменяемое
Неизменяемое

javajdbc7. Вам бы человека сначала нанять на написание
бизнесс задачи, а уж потом в СКЛ идти.


Это не бизнесс задача, это моя курсовая и может быть дипломная потом. И хоть я и настоящая блондинка, но раньше все получалось, мне помогали совсем чуть-чуть, а сейчас этот человек не может:(
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778345
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,
не придумывайте лишнего. Задача очень простая (если вы не занимаетесь формализацией языка, в чем я очень сомневаюсь)

исходные данные
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
 -- --------------------------------------------------------

-- глагол второе слово --
-- Структура таблицы `gl`
--

CREATE TABLE `gl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nam` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=Aria  DEFAULT CHARSET=utf8 PAGE_CHECKSUM=1 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `gl`
--

INSERT INTO `gl` (`id`, `nam`) VALUES
(1, 'ушел'),
(2, 'побежал'),
(3, 'уехал');

-- --------------------------------------------------------

-- местоимение - первое слово
-- Структура таблицы `m`
--

CREATE TABLE `m` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nam` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=Aria  DEFAULT CHARSET=utf8 PAGE_CHECKSUM=1 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `m`
--

INSERT INTO `m` (`id`, `nam`) VALUES
(1, 'Я'),
(2, 'студент'),
(3, 'препод');

-- --------------------------------------------------------

-- подлежащее третье слово
-- Структура таблицы `pl`
--

CREATE TABLE `pl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nam` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=Aria  DEFAULT CHARSET=utf8 PAGE_CHECKSUM=1 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `pl`
--

INSERT INTO `pl` (`id`, `nam`) VALUES
(1, 'река'),
(2, 'поле'),
(3, 'небо');

окончательный запрос - простое декартовое произведение (!!!???)
Код: sql
1.
2.
SELECT m.nam, gl.nam, pl.nam
FROM m, gl, pl;


результат
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Я	ушел	река
студент	ушел	река
препод	ушел	река
Я	побежал	река
студент	побежал	река
препод	побежал	река
Я	уехал	река
студент	уехал	река
препод	уехал	река
Я	ушел	поле
студент	ушел	поле
препод	ушел	поле
Я	побежал	поле
студент	побежал	поле
препод	побежал	поле
Я	уехал	поле
студент	уехал	поле
препод	уехал	поле
Я	ушел	небо
студент	ушел	небо
препод	ушел	небо
Я	побежал	небо
студент	побежал	небо
препод	побежал	небо
Я	уехал	небо
студент	уехал	небо
препод	уехал	небо
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778352
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
исходя из понимания простой вещи, усложняйте для дальнейшего изучения-понимания...
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778515
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovпростое декартовое произведение (!!!???)Ага "Но есть один нюанс" (с). Вернее, даже два:
1) заранее неизвестно ни количество, ни типы слов в предложении
2) отдельные слова должны быть фиксированы
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778544
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрите постановку задачи в http://sqlfiddle.com/#!2/265abe/1
данные
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
create table t1 as -- 1
select  1 id1, 'Студент' Word1 union all
select  2 , 'Аспирант' union all
select  3 , 'Уголовник';

create table t2 as -- 2
select  1 id2, 'бежит' Word2 union all
select  2, 'ползет' union all
select  3, 'тащится';

create table t3 as -- 3
select  1 id3, 'к речке' Word3 union all
select  2, 'к озеру' union all
select  3, 'к морю' union all
select  4, 'от безделья';

create table t4 as -- 4
select  1 id4, 'равнодушно' Word4 union all
select  2, 'весело' union all
select  3, 'утомленно' union all
select  4, 'грустно';

Create table Sentence (
  pnum int, wnum int,
  wid int, cid int);
insert Sentence values
  -- 1. Студент утомленно тащится к морю
  (1,1,1,1),(1,2,3,4),(1,3,3,2),(1,4,3,3)
  -- 2. от безделья угловник тащится
  ,(2,1,4,3),(2,2,3,1),(2,3,3,2);

запрос на формирование заданных шаблонов фраз
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select s.pnum
  , group_concat(
    coalesce(Word1, Word2, Word3, Word4)
    order by s.wnum
    separator ' '
    )text
from Sentence s
left join t1 on t1.id1=s.wid and s.cid=1
left join t2 on t2.id2=s.wid and s.cid=2
left join t3 on t3.id3=s.wid and s.cid=3
left join t4 on t4.id4=s.wid and s.cid=4
group by s.pnum
;

PNUM TEXT1 Студент утомленно тащится к морю2 от безделья Уголовник тащится

Требуется сформировать по заданным шаблонам все возможные вариант построения фраз
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778593
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и тут мне стало интересно...
авторТребуется сформировать по заданным шаблонам все возможные вариант построения фраз
вот фразы
Код: plaintext
1.
2.
маша мыла раму
папа забивает гвоздь
мама готовит обед
что надо сделать? Запрос для построения этих фраз? Если варианты построения, то какие еще варианты могут быть?
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778607
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот портянка, покрутите
на тестовых дынных вроде работает
только concat_ws почему-то чудит, если унутре у него есть подзапросы - я переделал на простой конкат, только добейте в результирующий запрос пробелов
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
set @idparent=3;
select 
concat(
 "select concat("
 ,group_concat(case id_wordtype
     when 1  then concat('verb',positionword,'.word')
     when 10 then concat('noun',positionword,'.word')
     when 3  then concat('punctuat',positionword,'.word')
     -- <...>
     when 14/*fixed-id*/ then 
      concat('(SELECT f.word FROM fixed f join detail d on f.id=d.id_word where d.positionword=',positionword,' and d.id_parent=',@idparent,')')
     else '\'<unknown wordtype!>\''
     end
  order by positionword)
 ,") as res from (select null from dual) ddd"
 ,group_concat(case id_wordtype
     when 1  then concat('cross join verb verb',positionword)
     when 10 then concat('cross join noun noun',positionword)
     when 3  then concat('cross join punctuat punctuat',positionword)
     -- <...>
     when 14/*fixed-id*/ then ''
     else ''
     end
  order by positionword separator ' ')
 ," order by 1 limit 10") as prep_st
from detail where Id_Parent=@idparent


Alex_Ustinovчто надо сделать? Запрос для построения этих фраз?Перечитайте тему, ТС в принципе всё объяснила, в особенности в последних постах.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778610
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lamer yugaзапрос на формирование заданных шаблонов фразНу и опять же 16713331 . Изменилось предложение, и превед запросу.
ТС как раз и хочет не строить под каждое предложение запрос ручками.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778614
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как в фильме "Начни сначала":
- Вот у меня в песне все понятно - НА НЕДЕЛЬКУ ДО 2-ГО Я УЕДУ В КОМАРОВО...

Какие еще могут быть варианты?
Есть таблицы (четыре), это понятно.
непонятна логика заполнения табл. Sentence (!!!) Это уже готовые фразы или ВАРИАНТЫ возможных отношений слов в таблице?


Вот это я так понимаю - результат:
1 Студент утомленно тащится к морю
2 от безделья Уголовник тащится

А где условие задачи?
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778617
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinovи тут мне стало интересно...
авторТребуется сформировать по заданным шаблонам все возможные вариант построения фраз
вот фразы
Код: plaintext
1.
2.
маша мыла раму
папа забивает гвоздь
мама готовит обед
что надо сделать? Запрос для построения этих фраз? Если варианты построения, то какие еще варианты могут быть?
По шаблону "уголовник тащится" должны быть построены фразы {слово из T1}{слово из T2}, то есть
Код: plaintext
1.
2.
"Студент   бежит", "Студент   ползет", "Студент   тащится",
"Аспирант  бежит", "Аспирант  ползет", "Аспирант  тащится",
"Уголовник бежит", "Уголовник ползет", "Уголовник тащится"
но исключить исходную фразу "уголовник тащится"

Аналогично по шаблону "утомленно ползет к речке" должны быть построены фразы {слово из T4}{слово из T2}{слово из T3}, за исключением самого шаблона
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778619
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

я так понял, lamer yuga тоже учится параллельно или как то так и привела полное условие задачи...
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778638
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Естественно, фразы должны быть в исходном формате с добавлением номера версии, то есть было:
напоминание
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table t1 as -- 1
select  1 id1, 'Студент' Word1 union all
select  2 , 'Аспирант' union all
select  3 , 'Уголовник';

create table t2 as -- 2
select  1 id2, 'бежит' Word2 union all
select  2, 'ползет' union all
select  3, 'тащится';

фразасловоидтип(значение из нужной таблицы) 1 1 31(Уголовник) 1 2 32(тащится)
Должно быть:фразаверсиясловоидтип(значение из нужной таблицы) 1 0 1 31(Уголовник) 1 0 2 32(тащится) 1 1 1 11(Студент) 1 1 2 12(бежит) 1 2 1 11(Студент) 1 2 2 22(ползет) 1 3 1 11(Студент) 1 3 2 32(тащится) 1 4 1 21(Аспирант) 1 4 2 12(бежит) 1 5 1 21(Аспирант) 1 5 2 22(ползет) 1 6 1 21(Аспирант) 1 6 2 32(тащится) 1 7 1 31(Уголовник) 1 7 2 12(бежит) 1 8 1 31(Уголовник) 1 8 2 22(ползет)
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778639
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinovtanglir,

я так понял, lamer yuga тоже учится параллельно или как то так и привела полное условие задачи...
неправильно понял)))
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778654
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так мы имеем право добавлять в Sentence что-то? Или это в исходном условии?
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778661
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinovтак мы имеем право добавлять в Sentence что-то? Или это в исходном условии? в Sentence шаблоны фраз. По этим шаблонам надо сформировать новые предложения с CROSS JOIN всех слов по типу слова, удалить заданный шаблон и перенумеровать полученные версии фраз, соответствующих заданному шаблону.

Или из 16713989 это не ясно?
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778694
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov,

Это уже готовые фразы будут, они подготоваливаются пользователем, он же заполняет справочники фиксированных и изменяемых слов. Все остальное должна делать программа автоматически:пользоваетель говорит, сколько фраз он хочет получить на основе выбранной и ему они создаются.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778703
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirlamer yugaзапрос на формирование заданных шаблонов фразНу и опять же 16713331 . Изменилось предложение, и превед запросу.
ТС как раз и хочет не строить под каждое предложение запрос ручками.
Как раз нет. Приведенный запрос просто формирует заданный шаблон в наглядном виде. Почему вы считаете, что при изменении шаблона фраза будет построена неверно?

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

Весь вопрос в том, как построить эту таблицу.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778848
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Здравствуйте. Извините, пожалуйста, но там получается ошибка, а понять ваш код у меня не получается.
Вы не могли бы, пожалуйста пояснить его? Ошибка показывается - нет условия и даже сли там прописать какое-нибудь, то все равно остается, уже не понятно где.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select concat((SELECT f.word FROM tbl_fixedword f join tbl_templatedetail 
d on f.id=d.id_word where d.positionword=1 and d.Id_Template=3),(SELECT 
f.word FROM tbl_fixedword f join tbl_templatedetail d on f.id=d.id_word 
where d.positionword=2 and d.Id_Template=3),(SELECT f.word FROM 
tbl_fixedword f join tbl_templatedetail d on f.id=d.id_word where 
d.positionword=3 and d.Id_Template=3),(SELECT f.word FROM tbl_fixedword f 
join tbl_templatedetail d on f.id=d.id_word where d.positionword=4 and 
d.Id_Template=3),(SELECT f.word FROM tbl_fixedword f join 
tbl_templatedetail d on f.id=d.id_word where d.positionword=5 and 
d.Id_Template=3),noun6.word,punctuat7.word,noun8.word,punctuat9.word,(SELECT 
f.word FROM tbl_fixedword f join tbl_templatedetail d on f.id=d.id_word 
where d.positionword=10 and d.Id_Template=3),punctuat11.word,(SELECT 
f.word FROM tbl_fixedword f join tbl_templatedetail d on f.id=d.id_word 
where d.positionword=12 and d.Id_Template=3),(SELECT f.word FROM 
tbl_fixedword f join tbl_templatedetail d on f.id=d.id_word where[color=red] ВОТ ТУТ НИЧЕГО НЕТ[/color]) as res 
from (select null from dual) ddd     cross join tbl_noun noun6 cross join 
tbl_punctuation punctuat7 cross join tbl_noun noun8 cross join 
tbl_punctuation punctuat9  cross join tbl_punctuation punctuat11    cross 
join tbl_punctuation punctuat15 order by 1 limit 10;
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778891
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В собственной постановке ( 16713473 ) задача решена: http://sqlfiddle.com/#!2/f4f82/1 .
исх.данные
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
create table t1 as 
select  1 id1, 'Студент' Word1 union all
select  2 , 'Аспирант' union all
select  3 , 'Уголовник';

create table t2 as 
select  1 id2, 'бежит' Word2 union all
select  2, 'ползет' union all
select  3, 'тащится';

create table t3 as 
select  1 id3, 'к речке' Word3 union all
select  2, 'к озеру' union all
select  3, 'к морю' union all
select  4, 'от безделья';

create table t4 as 
select  1 id4, 'равнодушно' Word4 union all
select  2, 'весело' union all
select  3, 'утомленно' union all
select  4, 'грустно';

Create table Sentence (
  pnum int, wnum int,
  wid int, cid int);
insert Sentence values
  -- 1. Студент утомленно тащится к морю
  (1,1,1,1),(1,2,3,4),(1,3,3,2),(1,4,3,3)
  -- 2. грустно от безделья 
  ,(2,2,4,4),(2,4,4,3);

решение
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
select r.pnum, r.var_id, n.wn wnum
  , case n.wn when 1 then r. i1 when 2 then  i2 when 3 then  i3 when 4 then  i4 end wid
  , case n.wn when 1 then r.wc1 when 2 then wc2 when 3 then wc3 when 4 then wc4 end cid
  , case n.wn when 1 then r.wd1 when 2 then wd2 when 3 then wd3 when 4 then wd4 end word
  -- , r.*
from (
  select 
    if(@p=renum.pnum
       ,@n:=@n+1
       ,least(@p:=renum.pnum, @n:=1)
      )var_id
    , renum.*
  from(
    select d.pnum
      ,if(wn1=1,id1,if(wn2=1,id2,if(wn3=1,id3,if(wn4=1,id4,null)))) i1
      ,if(wn1=1, w1,if(wn2=1, w2,if(wn3=1, w3,if(wn4=1, w4,null))))wd1
      ,if(wn1=1, c1,if(wn2=1, c2,if(wn3=1, c3,if(wn4=1, c4,null))))wc1
      ,if(wn1=2,id1,if(wn2=2,id2,if(wn3=2,id3,if(wn4=2,id4,null)))) i2
      ,if(wn1=2, w1,if(wn2=2, w2,if(wn3=2, w3,if(wn4=2, w4,null))))wd2
      ,if(wn1=2, c1,if(wn2=2, c2,if(wn3=2, c3,if(wn4=2, c4,null))))wc2
      ,if(wn1=3,id1,if(wn2=3,id2,if(wn3=3,id3,if(wn4=3,id4,null)))) i3
      ,if(wn1=3, w1,if(wn2=3, w2,if(wn3=3, w3,if(wn4=3, w4,null))))wd3
      ,if(wn1=3, c1,if(wn2=3, c2,if(wn3=3, c3,if(wn4=3, c4,null))))wc3
      ,if(wn1=4,id1,if(wn2=4,id2,if(wn3=4,id3,if(wn4=4,id4,null)))) i4
      ,if(wn1=4, w1,if(wn2=4, w2,if(wn3=4, w3,if(wn4=4, w4,null))))wd4
      ,if(wn1=4, c1,if(wn2=4, c2,if(wn3=4, c3,if(wn4=4, c4,null))))wc4
    from(
      select distinct s.pnum
      from Sentence s
      -- where s.pnum=2
      )d
    left join(
      select s.pnum pn1, s.wnum wn1, t1.id1, 1 c1, word1 w1
      from Sentence s
      join t1 on s.cid=1
      )s1 on s1.pn1=d.pnum
    left join(
      select s.pnum pn2, s.wnum wn2, t2.id2, 2 c2, word2 w2
      from Sentence s
      join t2 on s.cid=2
      )s2 on s2.pn2=d.pnum
    left join(
      select s.pnum pn3, s.wnum wn3, t3.id3, 3 c3, word3 w3
      from Sentence s
      join t3 on s.cid=3
      )s3 on s3.pn3=d.pnum
    left join(
      select s.pnum pn4, s.wnum wn4, t4.id4, 4 c4, word4 w4
      from Sentence s
      join t4 on s.cid=4
      )s4 on s4.pn4=d.pnum
    order by d.pnum, ifnull(i1,0), ifnull(i2,0), ifnull(i3,0), ifnull(i4,0)
    )renum
  cross join (select @p:=0,@n:=0)f
  )r
cross join (select 1 wn union all select 2 union all select 3 union all select 4)n
where 
  case n.wn when 1 then r. i1 when 2 then  i2 when 3 then  i3 when 4 then  i4 end is not null
;

фрагмент результатаPNUM VAR_ID WNUM WID CID WORD1 1 1 1 1 Студент1 1 2 1 4 равнодушно1 1 3 1 2 бежит1 1 4 1 3 к речке1 2 1 1 1 Студент1 2 2 1 4 равнодушно1 2 3 1 2 бежит1 2 4 2 3 к озеру...1 143 1 3 1 Уголовник1 143 2 4 4 грустно1 143 3 3 2 тащится1 143 4 3 3 к морю1 144 1 3 1 Уголовник1 144 2 4 4 грустно1 144 3 3 2 тащится1 144 4 4 3 от безделья2 1 2 1 4 равнодушно2 1 4 1 3 к речке...2 15 2 4 4 грустно2 15 4 3 3 к морю2 16 2 4 4 грустно2 16 4 4 3 от безделья

Вариации с постоянными и переменными таблицами мне не интересны, посему заморачиваться на них не буду, равно как и на удаление шаблона из результата
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38778932
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lamer yuga,

Ой, я сначала очень обрадовалась, прямо похоже, что то самое! Но только внизу в самом если результаты посмотреть, то вот такое получаетя :(

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
2	1	2	1	4	равнодушно
2	1	4	1	3	к речке
2	2	2	1	4	равнодушно
2	2	4	2	3	к озеру
2	3	2	1	4	равнодушно
2	3	4	3	3	к морю
2	4	2	1	4	равнодушно
2	4	4	4	3	от безделья
2	5	2	2	4	весело
2	5	4	1	3	к речке
2	6	2	2	4	весело
2	6	4	2	3	к озеру
2	7	2	2	4	весело
2	7	4	3	3	к морю
2	8	2	2	4	весело
2	8	4	4	3	от безделья
2	9	2	3	4	утомленно
2	9	4	1	3	к речке
2	10	2	3	4	утомленно
2	10	4	2	3	к озеру
2	11	2	3	4	утомленно
2	11	4	3	3	к морю
2	12	2	3	4	утомленно
2	12	4	4	3	от безделья
2	13	2	4	4	грустно
2	13	4	1	3	к речке
2	14	2	4	4	грустно
2	14	4	2	3	к озеру
2	15	2	4	4	грустно
2	15	4	3	3	к морю
2	16	2	4	4	грустно
2	16	4	4	3	от безделья
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38779086
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElenaTomsk,

но ведь в исходных данных указаны 2 ( два ) шаблона:
1. "Студент", "утомленно", "тащится", "к морю"
2. "грустно", "от безделья"

Поэтому в результатах тоже ДВЕ вариативные серии.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38779285
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lamer yugaПочему вы считаете, что при изменении шаблона фраза будет построена неверно?Хотя бы потому, что тот запрос делает фразу из ровно четырёх слов, а их может быть, о ужас, пять. Или даже шесть :)
lamer yugaПриведенный запрос просто формирует заданный шаблон в наглядном видеВообще-то он формирует не шаблон, а варианты по одному жёстко заданному шаблону...
lamer yugaАналогично, этот запрос можно адаптировать для формирования вариантов предложений, соответствующих построенной неким чудесным образом таблице-результатуРучками адаптировать? В энный раз повторяю, что "адаптироваться" он должен автоматически. Или, может, это я чего-то не понял?
lamer yugaAlex_Ustinovtanglir,
я так понял, lamer yuga тоже учится параллельно или как то так и привела полное условие задачи...
неправильно понял)))А почему вы тогда так уверены, что поняли условие задачи лучше нас?
lamer yugaрешениеПока не вчитывался, но уже вижу просто-таки дохренища материализации. Как там со скоростью?
ElenaTomskИзвините, пожалуйста, но там получается ошибка, а понять ваш код у меня не получается.Текст ошибки дайте. У меня на выложенной вами структуре работало (только заменил it_wordtype на id_wordtype, это была явная опечатка).
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38779405
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirlamer yugaПочему вы считаете, что при изменении шаблона фраза будет построена неверно?Хотя бы потому, что тот запрос делает фразу из ровно четырёх слов, а их может быть, о ужас, пять. Или даже шесть :)
на самом деле ограничение есть - не больше одного слова из каждой таблицы. А откуда вы взяли ровно четыре слова?
tanglirlamer yugaпропущено...

неправильно понял)))А почему вы тогда так уверены, что поняли условие задачи лучше нас?Может и не лучше, но - в меру своей испорченности. Хотя, судя по реплике ТС, наши меры идентичны.
tanglirlamer yugaрешениеПока не вчитывался, но уже вижу просто-таки дохренища материализации. Как там со скоростью?А вот тут вы правы, со скоростью был бы швах, будь таблицы побольше. А так - нормулёк там со скоростью
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38779409
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS. Насчет скорости - жду ваше решение;-))
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38779479
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lamer yugaА откуда вы взяли ровно четыре слова?Сейчас перечитал тот запрос - так это действительно формирование фраз из ровно тех слов, ид которых есть в шаблоне. Я-то думал, это неудачная попытка решить задачу ТС. Тогда это возражение снимается.
lamer yugaНасчет скорости - жду ваше решениеУже было 16713822 .
Единственный момент - подселекты могут выполняться N раз, спасибо мускльному недооптимизатору. Ну да их можно вообще вынести в отдельные запросы, всё равно текст финального запроса собирается в строке для последующего исполнения, туда же запихнуть и все эти фикс. значения.
Хотя всё это фигня - навряд ли у ТС есть длинные предложения, при обработке которых только и была бы заметна разница во времени.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38779493
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой
так там не просто материализация, там ****** какая материализация:
lamer yuga
Код: sql
1.
2.
      from Sentence s
      join t4 on s.cid=4

и потом 4 вот таких кучи друг на друга помножить
причём не обычным, а левым джойном
а потом ещё ордербай всей получившейся кучищи :)

Хотя... если это переделать для одной фразы (т.е. ограничить каждую подвыборку одной фразой), то, может, и нормально получится.
lamer yugaсо скоростью был бы швах, будь таблицы побольшеElenaTomskОбщее число слов около 70 тысячИ это только слов, а сколько будет предложений, остаётся только догадываться
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38780870
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirой
так там не просто материализация, там ****** какая материализация:
lamer yuga
Код: sql
1.
2.
      from Sentence s
      join t4 on s.cid=4

и потом 4 вот таких кучи друг на друга помножить
причём не обычным, а левым джойном
а потом ещё ордербай всей получившейся кучищи :)

Хотя... если это переделать для одной фразы (т.е. ограничить каждую подвыборку одной фразой), то, может, и нормально получится.
lamer yugaсо скоростью был бы швах, будь таблицы побольшеElenaTomskОбщее число слов около 70 тысячИ это только слов, а сколько будет предложений, остаётся только догадываться

Здравствуйте. Извините, а немногли бы пояснить, как работает ваш код? Хотелось самой разобраться в нем, но не получается.
Вижу несколько сразу джойнов к словам в фиксированной форме, видимо, их должно быть столько же, сколько будет фиксированных, слов?

а почему нельзя сделать вроде бы вот так:

select id_word
, case wordtype = 1 then (select word from fixedword where id = id_word) end
-- и так далее по типам?
from detail;

Я пробовала, но у меня не получется сделать id = id_word, потому что оно находится выше, чем подзапрос, наверное. Да?
И вот это непонятно: select null from dual - это какая то специфическая, служебная таблица таблица?

Предложений сейчас в базе около 1000, ожидается больше минимум в-пятеро. Слов в предложении в среднем 10-15, но может быть и до 40, при этом изменяемых слов не менее пяти, максимум 20 пока.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38780882
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,

Ктоме этой курсовой, у вас наверное был/есть/будет
какой-нибудь курс по анализу и постановке задач.

Несколько человек пытаются понять задачу и вы честно
пытаетесь ее обяснить -- но четкого понимания кажется нет.

Засим я предлагаю следуюшее:

1. если вы знаете какой-нибудь язык програмирования высокого уровня
(жабу, руби, ц#, фортран, басик...) то решите задачу на этом языке и
покажите его здесь -- сделаем реверсе енжиниринг и будем думать
дальше. Я предлагаю это ради того что бы
задачу хоть как-то решить логически правильно,
не заморачиваясь на ограничения СКЛ и на ограничения по скорости.

Другими словами -- разделить
(а) бизнес-задачу -- построить предложения и
(б)системные требования -- использование СКЛ и скорость.

2. или сделайте нормальную постановку задачи.
на самом деле уже близко -- есть структура данных,
есть неплохое обьянение -- остались мелочи.
Соберите аттачмент и вашего поста 16710677 ,
добявьте туда таблицу ПЕРЕНТ и добавьте туда
описание из 16712320 и других постов.
Обязательно пронумеруйте каждый параграф и каждый СКЛ
в тексте -- удобнее будет спрашивать наводяшие вопросы по
референсу на номер параграфа.
По факту -- это будет добротный кусок курсовика --
постановка технической части задания и методы ее решения.

2.б. ПОсле полного описания таблиц -- начните описание задачи примерно так:

Проходит Вася и заводит в таблицу ПАРЕНТ новое предложение.
При этом система сразу разбирает предложение на части и
записывает части в таблицу ДЕТАИЛ, сохраняя порядок введенных слов
в ВОРДПОСИТИОН. После этого система
дает возможность Васе отметить какие части предложения
фиксированые а для каких он хочет найти альтернативы.
(система записывает эти требоеания в ДЕТАИЛ как тип 14,
остальные типы 1,3,7,10 система должна опознать сама....).

Далее Вася выбирает тип альтернации, напромер "студенческий" или
"подводный" или "томный". Эти типы выдаются системой
как дроп-давн мену из имеюшихся в таблице АБС.
Этот тип впоследствии будет использован как дополнительный
филтр для выбора алтернатции слов.

Вася также задает максимальное количество результатов --
просто лимит -- и задает способ сортировки -- по алфавиту,
по расположению звезд, по настроению женской души в период
полураспада отношений итд.

Рася жмет кнопку САБМИТ и систем начинает думать и пить кофе.
ПОпив кофею, систем достает из таблицы ДЕТАИЛ слова в порадке
ВОРДПОСИТИОН и для каждого слова делает следуюшее:
если слово имеет тип 14 -- фиксированое,
то система радуется и уходит покурить ибо ничего делать не надо.
Если деталька имеет тип 1,3,7,10, то система идет
в несколько (а я предлагал в одну) таблиц и ишет там
алтернативы -- не забывая про дополнительные филтры
по типу предложения.

Набрав все алтернативы система картезиально
перемножает их друг на друга и раскладывает по
заданому порядку (ой, а как заданый порядок хранить?
или фик с ним с порядком? или еше динамический ОРДЕР БУ писать?).
выбирает ТОП-20 из них и выдает Васе.
Вася радуется и дарит Лене цветы.

Вася ташится и дарит Лене цветы.
Вася ташится и дарит Лене киску.
Вася ташится и кормит Лене киску.
Вася радуется и кормит Лене киску.
Вася радуется и кормит Маше киску.
Ситема забраковывает Машу потомучто Лена тут фиксирована
и от обиды переводит Васю в алтернативы
Петя радуется и кормит Лене киску.
Женя радуется и кормит Лене киску.
Оля радуется и кормит Лене киску.
Преподавать негодует почему Оля и Лена попали в одно предложение и
вводит дополнительный филтр на тип предложения.

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

авторselect id_word
, case wordtype = 1 then (select word from fixedword where id = id_word) end
-- и так далее по типам?
from detail;

НУ в смысле перемножить всё-на-вся и отбирать варианты по
словотипам (case wordtype = 1). Для таких задач как раз
более процедурный язык или хранимые процедуры подойдух лучше.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38782161
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskВижу несколько сразу джойнов к словам в фиксированной форме, видимо, их должно быть столько же, сколько будет фиксированных, слов?К фикс-словам нет джойнов, они выбираются подзапросами. Как раз потому, что джойны нужны для перебора вариантов, а для фикс-слов нужен всего один вариант. Хотя... можно и обычными джойнами прицепить, что-то я перемудрил с этими подзапросами :) Но подзапросы тоже должны работать.
ElenaTomskа почему нельзя сделать вроде бы вот так:

select id_word
, case wordtype = 1 then (select word from fixedword where id = id_word) endа откуда сервер узнает, из какой строки detail ему брать этот id_word?
ElenaTomskЯ пробовала, но у меня не получется сделать id = id_word, потому что оно находится выше, чем подзапрос, наверное. Да?Недочитал. Да :)
ElenaTomskИ вот это непонятно: select null from dual - это какая то специфическая, служебная таблица таблица?Да, это системная "пустая" таблица. В принципе, можно было бы и убрать, но тогда надо заморачиваться с тем, что в начале фром-секции первый кроссджойн не нужен. Кода будет больше, а серверу что так, что так одинаково - уж с константными-то таблицами он, слава всем богам, умеет работать без закидонов.
ElenaTomskПредложений сейчас в базе около 1000, ожидается больше минимум в-пятеро. Слов в предложении в среднем 10-15, но может быть и до 40, при этом изменяемых слов не менее пяти, максимум 20 пока.Тут вопрос, напротив, в количестве фиксированных слов, именно на них может быть просадка (в варианте с подзапросами). Но это надо уже на реальных данных смотреть.

А насчёт пустого условия в where - мистика! Вы же сами видите, в коде-генераторе ничего похожего нет...

javajdbcДля таких задач как раз
более процедурный язык или хранимые процедуры подойдух лучше.Это с самого начала было ясно, тут весь интерес сделать одним запросом, ну или двумя сборка+экзек :)
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38782232
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

tanglirElenaTomskВижу несколько сразу джойнов к словам в фиксированной форме, видимо, их должно быть столько же, сколько будет фиксированных, слов?К фикс-словам нет джойнов, они выбираются подзапросами. Как раз потому, что джойны нужны для перебора вариантов, а для фикс-слов нужен всего один вариант. Хотя... можно и обычными джойнами прицепить, что-то я перемудрил с этими подзапросами :) Но подзапросы тоже должны работать.


Но джойны же быстрее?

tanglirselect id_word
, case wordtype = 1 then (select word from fixedword where id = id_word) endа откуда сервер узнает, из какой строки detail ему брать этот id_word?
[/quot]

Фиксированные слова уникальные у меня, если Id слова 7897 например, то второго такого фиксированного не будет. Поэтому можно, наверное, ориеннироваться на Id слова + тип его - фиксированное?

tanglirElenaTomskЯ пробовала, но у меня не получется сделать id = id_word, потому что оно находится выше, чем подзапрос, наверное. Да?Недочитал. Да :)


скажите, пожалуйста: а это как-то можно исправить или это особенность этой версии sql? У меня последняя версия community .21, кажется. Если это сделать через джойны как-то, то будет работать?

ElenaTomskПредложений сейчас в базе около 1000, ожидается больше минимум в-пятеро. Слов в предложении в среднем 10-15, но может быть и до 40, при этом изменяемых слов не менее пяти, максимум 20 пока.

tanglirТут вопрос, напротив, в количестве фиксированных слов, именно на них может быть просадка (в варианте с подзапросами). Но это надо уже на реальных данных смотреть.


у меня быстрая машина и ssd, а план выполнения смотреть я умею, только понимать не умею пока. :(

tanglirА насчёт пустого условия в where - мистика! Вы же сами видите, в коде-генераторе ничего похожего нет...


К сожалению я не смогла разобраться в этом никак. Так ни разу не запустилось даже, поэтому и хотела бы переписать это сама, хочется же понять, что умные люди делают!!!!
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38782267
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskНо джойны же быстрее?Как правило да. Я просто не сообразил, когда писал тот вариант.
ElenaTomskК сожалению я не смогла разобраться в этом никак.Завтра ещё раз проверю и скину дамп, уже точно рабочий. Основанный на вашем кратком описании.
ElenaTomskФиксированные слова уникальные у меня, если Id слова 7897 например, то второго такого фиксированного не будет. Поэтому можно, наверное, ориеннироваться на Id слова + тип его - фиксированное?Ориентироваться, конечно, можно, но... видите ли, в чём дело - в получающемся (не в генерирующем) запросе таблица detail не фигурирует в разделе "фром". То есть её там нет. Вообще. А нам надо вытащить слово, соответствующее ворд_ид, расположенному в данной конкретной записи этой самой таблицы. А таблицы-то как бы в запросе нет :)
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38782661
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во вложении дамп с рабочим примером. Создаётся БД "testwords" с несколькими записями и процедурой generate_phrases(параметры - ид предложения и количество записей в результате). Сам запрос чуть-чуть переделан - вместо подзапросов, которые могут исполняться несколько раз, значения фиксированных слов вычисляются разово, но суть вычислений та же, что и в предыдущем варианте.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38782668
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка: в процедуре в этом месте
Код: sql
1.
 ,") as res from (select null from dual) ddd "

в конце строки нужен пробел (в дампе его нет).
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38783589
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...ну вот, я такой роман написал,
а ТС не среагировала...

нет в жизни счастья...пойду текилу кушаю.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38786776
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Здравствуйте! Большое спасибо, все работает. Почти. :( Как только я перехожу на реальные данные, где много записей, то получаю вот такое сообщение:

2 Row 360 was cut by GROUP_CONCAT() SQL1.sql, это вылечела вот так: SET GLOBAL group_concat_max_len=1500000;

Но теперь все очень, очень долго работает. При этом оперативная память практически не увиличивается потребление, 500 мегабайт сервер взял и больше не просит, а есть 32 гигабайта, а процессор на 26 процентов загружен, core i7.

Если я правильно все помню, это значит, что большого набора данных сейчас не загружено и что процессор ничего не обрабатывает, потому что сложный запрос забрал бы всю память или намного больше нагрузил процессор? Наверное, подготавливается кеш запроса, потому что в итоге я получила сообщение:
"Incorrect key file for table 'C:\Temp\#sql478_9_a.MYI'; try to repair it SQL7.sql"
Поискала, нашла вот тут:
http://www.sql.ru/forum/986802/126-incorrect-key-file-for-table-tmp-sql?hl=incorrect key file for table, но тут нет решения.

Места на диски С еще 40 гигабайт, это ssd. Формат таблиц InnoDB, базу восстанавливала из бекапа несколько раз, размер бекапа 5 мегабайт, это же совсем мало.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38791796
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди, неужели никто не знает, что делать?
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38791890
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,

народ в интернете говорит что это
от нехватки места вообше или в ТЕМП
директории. Кто-то советует пересоздать, уменьшить
количество индексов.

Возможно имеет смысл оптимизировать по датапотоку:
Обрабатывать кусками по 5-10%.
Если есть возможность, хорошо бы за параллелить,
но это надо знать конкретно что вы написали.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38792209
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Здравствуйте.


Дело в том, что я это тоже все уже прочитала и в своем предыдущем сообщении написала. Место есть, оперативной памяти тоже много, поэтому совершенно непонятно, что не работает.

Код это не мой вовсе, это tanglir написал, за что я ему очень благодарна, просто он не работает на моих данных настоящих.
Последний его код в этой ветке написаный.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38792245
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,

Пожалуйста, всегда давайте точные ссылки.
Вы про этот 16735620 код или какой?
Если по ссылке, то это генератор.

Для конкретного анализа нужен код который сей генератор создал.
Этот код 16715202 , как я понимаю был с ошибкой
и генератор потом был улучшен.

Таким образом, нужно:
1. реально сгенерированый код.
2. его ( ЕКСПЛЕЙН )
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38792250
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... и чтоб два раз не вставать.

1. ЕКПЛЕЙН сделать на реальной базе
(не волнуйтесь, это занимает секунду)

2. Когда вы получите сгенерированый код с кучей CROSS JOIN
сделайте и покажите ресультат:
select count(1) from <table>
где <табле> замените (по одной за раз) на все подряд таблицы с CROSS JOIN.
Т.е должно быть 5-8 результатов COUNT.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38792454
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, если можно гарантировать, что ид фиксированных слов никогда не будут ссылаться на отсутствующие ид, то можно в генераторе лефтджойны заменить (секция "when 14" во втором групконкате) на просто джойны - может, оптимизатору станет полегче. Можно ещё ордербай убрать, вам же неважно, какие именно 20 результатов выйдут, или важно?
Ну и таки да, ждём эксплейн.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38793946
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Здравствуйте! Очень рада, что вы ответили!!! Знаете, у меня на боевых таблица, я их переделала немного названия, получается вот такой код для выполнения:

Код: sql
1.
2.
3.
4.
5.
6.
select concat(fixed1.cWord, ' ',fixed2.cWord, ' ',fixed3.cWord, ' ',fixed4.cWord, ' ',fixed5.cWord, ' ','<unknown wordtype!>', ' ',punctuat7.Punctuation, ' ','<unknown wordtype!>', ' ',noun9.Nominative, ' ',punctuat10.Punctuation, ' ',noun11.Nominative, ' ',punctuat12.Punctuation, ' ',fixed13.cWord, ' ',punctuat14.Punctuation, ' ',fixed15.cWord, ' ',fixed16.cWord, ' ',fixed17.cWord, ' ',punctuat18.Punctuation) as res from (select null from dual) ddd  LEFT JOIN 
          (SELECT f.cWord FROM tbl_fixedword f join tbl_templatedetail d on f.Id_FixedWord =d.id_word where d.PositionWord=1 and d.Id_Template=3) fixed1 on 1=1  LEFT JOIN 
          (SELECT f.cWord FROM tbl_fixedword f join tbl_templatedetail d on f.Id_FixedWord =d.id_word where d.PositionWord=2 and d.Id_Template=3) fixed2 on 1=1  LEFT JOIN 
          (SELECT f.cWord FROM tbl_fixedword f join tbl_templatedetail d on f.Id_FixedWord =d.id_word where d.PositionWord=3 and d.Id_Template=3) fixed3 on 1=1  LEFT JOIN 
          (SELECT f.cWord FROM tbl_fixedword f join tbl_templatedetail d on f.Id_FixedWord =d.id_word where d.PositionWord=4 and d.Id_Template=3) fixed4 on 1=1  LEFT JOIN 
          (SELECT f.cWord FROM tbl_fixedword f join tbl_templatedetail d on f.Id_FixedWord =d.id_word where d.PositionWord=5 and d.Id_Template=3) fixed5 on 1=1  cross join tbl_punctuation punctuat7  cross join tbl_noun noun9 cross join tbl_punctuation punctuat10 cross join tbl_noun noun11 cross join tbl_punctuation pu ORDER BY 1 LIMIT 10



и здесь есть вот здесь punctuat12 и punctuat18. Они у меня есть в tbl_templatedetail, в этих позициях, то-есть 12 и 18, но в собственно джойнах нет кода, последний tbl_punctuation punctuat10. Кроме того, как я поняла вашу логику, все значения из таблицы tbl_punctuation просто добавляются cross joinom, но это же тоже неверно, у меня же на нужном месте стоит или запятая или тире или еще что-нибудь одно, пунктуация, это просто разновидность фиксированных слов.

ТАКже прикладываю explain который сделался если я убираю из вышеприведенного кода как раз эти ссылки на punctuat, инече запрос не запускается совсем.

Извините, вы только не обижайтесь, пожалуйста, но может быть, я могу вам как-то оплатить работу? Потому что получается, что вы столько для меня делаете просто так, неудобно очень. :(
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38793958
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Здравствуйте.

Вот такие у меня результаты по выборке из каждой таблицы с explain:

по прилагательным так
1 SIMPLE tbl_adjective index (null) FK_tbl_adjective_tbl_comparison_Id_Comparison 1 (null) 390 Using index

по существительным так
1 SIMPLE tbl_noun index (null) FK_tbl_noun_tbl_wordnumber_Id_WordNumber 1 (null) 528 Using index

по глаголам так

1 SIMPLE tv index (null) FK_tbl_verb_tbl_infinitive_Id_Infinitive 1 (null) 157 Using index

по знакам препинания

1 SIMPLE tp index (null) PRIMARY 4 (null) 12 Using index

по фиксированным словам так вот

1 SIMPLE tf index (null) UI_cWord 198 (null) 2978 Using index


Вот я знаете не понимаю, почему только в последнем случае используются уникальный индекс, первичный ключ тоже не используется, при том что он есть у меня во всех таблицах, а почему-то используются индексы FK. Я думала, что при count должен использоваться именно PK.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38793965
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,

Елена, плохо отформатированый код -- сильно мешает.... сильно.
Вместо того что что-то умное (или не умное) сказать,
сначала я потратил 10 минут на форматирование:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
SELECT 
    CONCAT(fixed1.cWord,              ' ',
            fixed2.cWord,             ' ',
            fixed3.cWord,             ' ',
            fixed4.cWord,             ' ',
            fixed5.cWord,             ' ',
            '<unknown wordtype!>',    ' ',
            punctuat7.Punctuation,    ' ',
            '<unknown wordtype!>',    ' ',
            noun9.Nominative,         ' ',
            punctuat10.Punctuation,   ' ',
            noun11.Nominative,        ' ',
            punctuat12.Punctuation,   ' ',
            fixed13.cWord,            ' ',
            punctuat14.Punctuation,   ' ',
            fixed15.cWord,            ' ',
            fixed16.cWord,            ' ',
            fixed17.cWord,            ' ',
            punctuat18.Punctuation) AS res
FROM
    (SELECT NULL FROM DUAL) ddd
    
LEFT JOIN
    (SELECT  f.cWord
       FROM  tbl_fixedword f
       JOIN  tbl_templatedetail d ON f.Id_FixedWord = d.id_word
      WHERE  d.PositionWord = 1 AND d.Id_Template = 3
	) fixed1 ON 1 = 1
    
LEFT JOIN
    (SELECT  f.cWord
       FROM  tbl_fixedword f
       JOIN  tbl_templatedetail d ON f.Id_FixedWord = d.id_word
      WHERE  d.PositionWord = 2 AND d.Id_Template = 3
    ) fixed2 ON 1 = 1
    
LEFT JOIN
    (SELECT  f.cWord
	   FROM  tbl_fixedword f
       JOIN  tbl_templatedetail d ON f.Id_FixedWord = d.id_word
      WHERE  d.PositionWord = 3 AND d.Id_Template = 3
    ) fixed3 ON 1 = 1
    
LEFT JOIN
    (SELECT  f.cWord
       FROM  tbl_fixedword f
       JOIN  tbl_templatedetail d ON f.Id_FixedWord = d.id_word
      WHERE  d.PositionWord = 4 AND d.Id_Template = 3
    ) fixed4 ON 1 = 1
    
LEFT JOIN
    (SELECT  f.cWord
       FROM  tbl_fixedword f
       JOIN  tbl_templatedetail d ON f.Id_FixedWord = d.id_word
      WHERE  d.PositionWord = 5 AND d.Id_Template = 3
   ) fixed5 ON 1 = 1

CROSS JOIN    tbl_punctuation punctuat7
CROSS JOIN    tbl_noun noun9
CROSS JOIN    tbl_punctuation punctuat10
CROSS JOIN    tbl_noun noun11
CROSS JOIN    tbl_punctuation pu

ORDER BY 1
LIMIT 10
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38793977
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

у меня так программа выдает, не знаю, как ее форматировать. Но посмотрела сейчас выполнение, действительно не хватает дискового пространства, но это просто ужасно! Выполнялось это примерно 5 минут и забрало 38 гигабайт на диске, больше просто нет и оно умерло.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38793991
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Ой, я когда убрала вот сейчас order by, знаете, оно сразу выполнилось, моментально! Скаожите пожалуйста, почему такая разница получается от просто сортировки, вот перед этим запускала, было пять минут и сьело весь диск?
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794051
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskjavajdbc,

у меня так программа выдает, не знаю, как ее форматировать. Но посмотрела сейчас выполнение, действительно не хватает дискового пространства, но это просто ужасно! Выполнялось это примерно 5 минут и забрало 38 гигабайт на диске, больше просто нет и оно умерло.


1. форматировать можно ручками, и во многих
программах есть опция ФОРМАТ (например в MySQL Workbench)

2. ОРДЕР БУ заставляет прграмму перебрать ВСЕ варинаты,
их у вас громадное количество и они забивают диск.

Если убрать ОРДЕР БУ то програма мгновено наберет первые 10
и выйдет по ЛИМИТ 10

3. по оптимизации пока не смотрел, может позже сегодня.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794065
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskjavajdbc,

Здравствуйте.

Вот такие у меня результаты по выборке из каждой таблицы с explain:

по прилагательным так
1 SIMPLE tbl_adjective index (null) FK_tbl_adjective_tbl_comparison_Id_Comparison 1 (null) 390 Using index

по существительным так
1 SIMPLE tbl_noun index (null) FK_tbl_noun_tbl_wordnumber_Id_WordNumber 1 (null) 528 Using index

по глаголам так

1 SIMPLE tv index (null) FK_tbl_verb_tbl_infinitive_Id_Infinitive 1 (null) 157 Using index

по знакам препинания

1 SIMPLE tp index (null) PRIMARY 4 (null) 12 Using index

по фиксированным словам так вот

1 SIMPLE tf index (null) UI_cWord 198 (null) 2978 Using index


Вот я знаете не понимаю, почему только в последнем случае используются уникальный индекс, первичный ключ тоже не используется, при том что он есть у меня во всех таблицах, а почему-то используются индексы FK. Я думала, что при count должен использоваться именно PK.


ну вообшето я спрашивал результат КАУТА а не ЕХПЛАИН этих маленьких СКЛов.
НО ЕХПЛАИН на самом деле показывает примерное количетво записей
и этого достаточно.
В виду специфики задания -- система должна "перемножить"
390 ажиктивов на 528 наунов на...на...на...
прочем столько раз сколько переменных слов в предложении.
Результат получается громадное чило записей и они убивают диск.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794066
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для форматирования по-ходу:

http://sqlformat.org/
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794072
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Елена,

напомните, плиз,

1. если слово фиксированое, то
его ВОБШЕ трогать не надо?

2. темплейты относятся только к переменным словам?

3. подвердите (или опровергинете) что все пунктуации
на самом деле фиксированы. Если так, можно ли слить их в
фиксированые слова?

4. сгенерированый СКЛ вызывает несколько вопросов
(типа #1 и #2 вверху). МОжете ли вы подвердить что логика
сгенерированого запроса верная?

5. Если сможете, попробуйте БЕЗ генератора самой составить
СКЛ для какого нибудь конкретного единичного предложения.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794154
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Здравствуйте.

Фиксированные слова, да. Они не меняются.

Теплейтдетайл содержит в себе полное описание всей фразы. В нем и изменяемые и неизменяемые слова.

Знаки препинания можно было бы вынести в фиксированные, но зачем? У меня их всего 12, а фиксированных слов больше, конечно, там есть идекс у меня, только все равно не понятно, зачем сливать. Я их специально разделяла для достижения максимальной скорости.

То как работает код от tanglir, очень похоже на то, что мне нужно, но окончательно не могу сказать, потому что не получается полную фразу сделать пока.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794253
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

с тем, почему пропадают куда-то punctuation12 и так далее - тоже разобралась. Не хватает длины varchar, даже максимальной, поставила mediumtext и все стало нормально!
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794330
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskjavajdbc,

Здравствуйте.

Фиксированные слова, да. Они не меняются.

Теплейтдетайл содержит в себе полное описание всей фразы. В нем и изменяемые и неизменяемые слова.

Знаки препинания можно было бы вынести в фиксированные, но зачем? У меня их всего 12, а фиксированных слов больше, конечно, там есть идекс у меня, только все равно не понятно, зачем сливать. Я их специально разделяла для достижения максимальной скорости.

То как работает код от tanglir, очень похоже на то, что мне нужно, но окончательно не могу сказать, потому что не получается полную фразу сделать пока.


1. если между фиксированым словом и фиксированой пунктуации нет
функциональной разницы, то слить их надо. В генераторе Танглира
пунктуация отрабатывается как "переменная" и выдает
кучу (как оказалось сейчас) ненужных кросс жоинтов.

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

3. знаете ли вы что такое денормализация?
Кто вам составил схему?

Ваша схема какято дуальная, с одной стороны
непонятно зачем разные типы слов вынесены в разные таблицы,
а с другой стороны используются ИД слов вместо более
привычного САМОГО слова как ИД.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794439
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Можно не добавлять в таблицу, а просто переделатаь код, что я и сделала. Теперь стало правильно подбирать пунктуацию.
Что такое денормализация, я знаю. И еще я знаю, что нормализация куда лучше, не вижу никаких плюсов от слияния, извините.

Код получился вот такой, непонятно только одно, может быть, можно как-то сделать чтобы не генерировать его заново каждый раз?
Или я глупости говорю? :( Очень смущает большое колличество джойнов к одной и то же таблице.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794486
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> javajdbc,

>> Можно не добавлять в таблицу, а просто переделатаь код, что я и сделала.
>> Теперь стало правильно подбирать пунктуацию.

OK, в генераторе изменени вроде правильно. ПО любому имеет смысл
показывать результат генерации тоже.

>> Что такое денормализация, я знаю.
>> И еще я знаю, что нормализация куда лучше,
>> не вижу никаких плюсов от слияния,

я говорил про две (несвязаные) вещи:
-- слияние пунктуации и фиксированых слов
-- денормализация -- замена ИД слова на само слово
во избежании дополнительных жоинтов

>> извините.

Не надо извинятся. Задачу можно решить разными способами.
В том числе и без слияния и без денормализации.
Пока надо сделать ЛЮБОЙ логическио правильно работаюший
вариант. Вернемся к оптимизации после логической валидации
решения.

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

К сожалению, чистой СКЛ не позволяет сделать то что вы хотите.
По определению -- СКЛ требуюет знать связки в момент
написания, а у вас в момент выполнения может оказатся
разные связки.

Теоретически, ЕСЛИ у вас конечное (не больше чем Н) количество слов в предложении
и ЕСЛИ у вас конечное число типов слов (не нольше чем М),
то можно написать СУМАШЕДШИЙ и ОЧЕНЬ МЕДЛЕНЫЙ скл с перемножением
всех М типов на каждом из Н слов.

Остается только генерации СКЛ на лету для каждого предложения.
Напромер как предложил Танглир или на жаве/ц#/руби итд.

>> Или я глупости говорю? :(

Вы имеете право говорить и желать все что угодно.
Ответ остается в силе:
В пределах СКЛ ваша задача (практически) не решается.
С использованием Stored Procedures или других языков -- пожалуйста.

>> Очень смущает большое
>> колличество джойнов к одной и то же таблице.

Ответ простой -- один жоинт на каждое переменое слово.
У вас будет 20 переменых слов в предложении -- будет 20 жоинтов.

(Жоинты на фиксированые слова можно не считать,
они быстрые. К томуже по логике не нужны и
легко убираются легкой денормализацией).
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794567
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

А разве нельзя сделать один джойн к таблице изменяемых слов? Или оптимизатор сам поймет, что несколько раз подключиться к одной таблице ненужно?

А можно сделать джойн с функциями или хранимиыми процедурами? Имеющийся код уже очень трудно читается, а мне еще нужно добавить к нему еще более совсем сложные конструкции. Если бы вот можно было бы куски с джойнами по фиксированным например словам бы вынести бы куда-то в функцию, она бы уже вернула рекордсет и с ним джойн. А саму функцию изменять было бы проще. Но видимо функцию нельзя, она же одно значение всегда возвращает, а надо много. Как-то иначе можно?

все также не могу понять, зачем объединять таблицы фиксированных слов и пунктуацию, какой от этого выигрышь, кроме упрощения написания.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38794792
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> А разве нельзя сделать один джойн к таблице изменяемых слов?
>> Или оптимизатор сам поймет, что несколько раз подключиться к одной таблице ненужно?

Вы поставили задачу: на КАЖДОЕ переменое слово перебрать варианты.
КАЖДЫЙ перебор есть новый джоин (если мы делаем это на СКЛ)

>> А можно сделать джойн с функциями или хранимиыми процедурами?
Имеющийся код уже очень трудно читается, а мне еще нужно добавить
к нему еще более совсем сложные конструкции. Если бы вот можно было
бы куски с джойнами по фиксированным например словам бы вынести
бы куда-то в функцию, она бы уже вернула рекордсет и с ним джойн.
А саму функцию изменять было бы проще. Но видимо функцию нельзя,
она же одно значение всегда возвращает, а надо много. Как-то иначе можно?

Вот! мы подходим к идее расширить рамки за пределы (чистого) СКЛа.
Можно создать такую програму на ЛЮБОМ языке - хранимые
процедурым, жава, фортран, идт.
По сути, програма ниже делает тоже самое что и генератор
Танглира.

- - - - - - - -

Входная переменая ПРЕДЛОЖЕНИЕ(список слов с типами)
ВЫходная переменая РЕСАЛТ_СЕТ(список предложений)

для каждого СЛОВО из ПРЕДЛОЖЕНИЕ
СТАРТ
ЕСЛИ СЛОВО.тип==фикс то "добавать слово в РЕСАЛТ_СЕТ".
АЛИ-НЕТ то селект соответствуюшие ВАРИАНТЫ из таблицы и "добавить ВАРИНАТЫ в РЕСУЛТ_СЕТ"
ЕНД
вернуть РЕСУЛТ_СЕТ

- - - - - - -

процедура "добавать слово в РЕСАЛТ_СЕТ" и "добавить ВАРИНАТЫ в РЕСУЛТ_СЕТ"
будут довольно простые тоже.

Конечно, если у вас 100 переменых по 10 тысяч варинатов -- вы убьете
компютер хоть на СКЛ, хоть на любом языке.

- - - - - - - -



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

Слитием всех фиксированых фрагментов, а также слитием
ВСЕ слов в одну таблицу вы сильно упростите генератор без
практически никакой потери скорости.
Упрошение генератора -- меньше ошибок и
лучшая читабельность и понимание происходяшего.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38796763
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Большое спасибо за советы. Наверное, дальше я уже сама все доделаю, есть только один самый последний вопрос. Он скорее к tanglir, но может быть вы тоже знаете? Как можно сделать, так, чтобы не попадали дубли? Наверное, я сама тоже знаю, надо применить Distinct. Но может быть можно сделать так, чтобы они эти дубли просто сразу не попадали, какое-то там условие добавить.
Извините, если я глупости говорю.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38796876
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk, дубли чего? По идее каждое предложение и так будет уникально, если дублей слов нет в исходных таблицах.
Или вы про "дубли" с одинаковыми словами, но разной пунктуацией? Так переделайте код для пунктуации по аналогии с кодом для фикс. слов (я уже это предлагал), и эти "дубли" исчезнут.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38799469
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Здравствуйте. Я просто плохо описываю, наверное. Потому что хочется самой разобраться, но не получается.
У меня там есть еще дополнительные настройки, которые помогают работать с предложениями. Например, описание должностей или описание действий, или по возрасту группировка, много еще всяких условий. Это лежит в двух дополнительных таблицах tbl_subdirection and tbl_attribute. Между ними и деталями темплейта установлена связь, это таблицы tbl_l_templatedetail_subdirection и
tbl_l_templatedetail_attribute. И такие же таблицы есть для связи с существительным: tbl_l_noun_subdirection and tbl_l_noun_attribute.

tbl_subdirection может только одно значение содержать, а вот атрибуты много : нампример студент и солдат могут быть такими атрибутами:
1 молодые люди
2 мужчины

Дальше пользователь назначает, какие именно атрибуты могут использоваться и должны отбираться слова только такие, какие имеют этот атрибут. На каждое изменяемое слово могут быть свои атрибуты, разные. Вот так. И я вот такой запрос написала, но только очень много дублей получается, а значит я ошиблась где-то.

У вас было cross join noun

у меня стало
cross join
(SELECT n.Nominative, na.Id_Attribute FROM
tbl_templatedetail tt
JOIN tbl_l_templatedetail_subdirection ts ON tt.Id_TemplateDetail = ts.Id_TemplateDetail
JOIN tbl_l_templatedetail_attribute ta ON tt.Id_TemplateDetail = ta.Id_TemplateDetail
JOIN tbl_l_noun_subdirection ns ON ts.Id_SubDirection = ns.Id_SubDirection
JOIN tbl_l_noun_attribute na ON ta.Id_Attribute = na.Id_Attribute
JOIN tbl_noun n ON ns.Id_Noun = n.Id_Noun
WHERE tt.Id_Template = 3 AND tt.Id_WordClass = 10) noun

Но это не работает потому что много дублей и потому что все равно не получается правильные атрибуты для каждого слова отобрать почему-то. Получается что все атрибуты вместе назначаются на каждое слово, по-моему.

А с фиксированными словами я уже все поменяла ! Работает хорошо и правильно !!!
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38807856
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! tanglir, помогите, пожалуйста, закончить ! совсем чуть-чуть осталось, а без вас у меня никак не получается. :~((((((
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38809733
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk, завтра буду занят, а послезавтра могу посмотреть. Пока что попрошу показать на примере, как это должно работать - т.е:
1)предложение из templatedetail;
2)слова, соответствующие ему например, из Noun;
3)соответствующие этим словам записи в доп.таблицах, о которых идёт речь;
4)что выбирает (какие параметры процедуры помимо задаёт) пользователь и что он должен получить (а чего - не должен).
А то постановка задачи и впрямь как-то мутновато выглядит, на что вам в "проектировании" уже указывали.
PS. create table этих табличек также приветствуется.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38809834
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

Девушке уже намекали (например 16726363 ) что
надо писать хорошее задание, но как-то все ad-hoc происходит.

Elena,

сделайте нормальную постановку задачи.
на самом деле уже близко -- есть структура данных,
есть неплохое обьянение -- остались мелочи.
Соберите аттачмент и вашего поста 16710677,
добявьте туда таблицу ПЕРЕНТ и добавьте туда
описание из 16712320 и других постов.
Обязательно пронумеруйте каждый параграф и каждый СКЛ
в тексте -- удобнее будет спрашивать наводяшие вопросы по
референсу на номер параграфа.
По факту -- это будет добротный кусок курсовика --
постановка технической части задания и методы ее решения.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38814822
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirElenaTomsk, завтра буду занят, а послезавтра могу посмотреть. Пока что попрошу показать на примере, как это должно работать - т.е:
1)предложение из templatedetail;
2)слова, соответствующие ему например, из Noun;
3)соответствующие этим словам записи в доп.таблицах, о которых идёт речь;
4)что выбирает (какие параметры процедуры помимо задаёт) пользователь и что он должен получить (а чего - не должен).
А то постановка задачи и впрямь как-то мутновато выглядит, на что вам в "проектировании" уже указывали.
PS. create table этих табличек также приветствуется.

Здравствуйте. create table прикладываю. Извините, но у меня постановка выглядит мутно потому что я не знаю, как правильно делать пока. Мне самой понятно, а обьяснить не получается?

Вот пример:

Общий темплейт: Студент идет к пруду .

Для него могут быть варианты: Студент, Декан, Солдат, Офицер, Спортмен. Пользователь в настройках выбирает: молодые люди. Это id_subdirection = 1.
Тогда там будет в tbl_templatedetail td join tbl_l_templatedetail_subdirection ts on td.Id_SubDirection = ts.Id_SubDirection
т.е должны отобраться только студент/офицер/спортсмен.

Соответственно получается так вот так:
select n.Noun from tbl_templatedetail td
join tbl_l_templatedetail_subdirection ts on td.Id_SubDirection = ts.Id_SubDirection
Join tbl_l_noun_subdirection sn on on ts.Id_SubDirection = sn.Id_SubDirection
join tbl_noun n on sn.Id_noun = n.Id_noun;
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38814824
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Здравствуйте. Я не понимаю, что значит "хорошая постановка". :( Может быть, вы мне подскажете пример или что нужно исправить в моем описании? Спасибо !
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38815678
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskjavajdbc,

Здравствуйте. Я не понимаю, что значит "хорошая постановка". :( Может быть, вы мне подскажете пример или что нужно исправить в моем описании? Спасибо !

"хороший вопрос есть пол ответа". Варинатов описания задачи много.

(Более того, для решения часто надо несколько (!) описаний.
Например, обшее на высоком уровне. бизнес описание, техническое описание,
описание проверок и принятия...)

Я попытался дать (несколько фривольный) пример тут: 16726363

У вас уже достаточно много сделано, правда в разбросаном виде.
Сейчас, если Танглир или кто еше будут решать вторую половину задачи
(настройки выбора слов) им придется опять лезть в 35 предыдуших постов
стобы восстановить понимание таблиц и связок.

Посему, бы вам сделать несколько документов:

1. обшее описание задачи, основные игроки и типичнуй юзе-кейс
2. Дб диаграма физическая или достаточно детальная логическая
3. скипты создания таблиц, заполнение тестовыми данными,
тестовый пример ввода и ожидаемый результат.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38815682
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Общий темплейт: Студент идет к пруду .

как систем принимает этот темплате?
он один вводится с консоли?
или такие темплейтов10 тысяч подается как бач файл?

>> Для него могут быть варианты: Студент, Декан, Солдат, Офицер, Спортмен.

кто делает список вариантов? они есть глобально для всех
в системе с самого начала (заведены админом?)
или пользователь может завести варинаты сам только для себя?
только для данного темплейте?

>> Пользователь в настройках выбирает: молодые люди. Это id_subdirection = 1.

стоп. кто задает какие под-группы имеются для каждой категории слов?
Это глобальные (для всех) настройки или на каждого пользователя свои?

Этот выбор обязательный? или кто-то может ничего не выбирать?

>> Тогда там будет в tbl_templatedetail td join tbl_l_templatedetail_subdirection ts
>> on td.Id_SubDirection = ts.Id_SubDirection
>> т.е должны отобраться только студент/офицер/спортсмен.

логика не сложная и понятная. Но вот с названиями таблиц -- беда --
субдиркшн? может лучше назвать filter_group.
Можно ли убрать префикс ТБЛ_ у всех таблиц?

>> Соответственно получается так вот так:
>> select n.Noun from tbl_templatedetail td
>> join tbl_l_templatedetail_subdirection ts on td.Id_SubDirection = ts.Id_SubDirection
>> Join tbl_l_noun_subdirection sn on on ts.Id_SubDirection = sn.Id_SubDirection
>> join tbl_noun n on sn.Id_noun = n.Id_noun;

ВЫглядит нормально, проверьте на тестровых данных.
Если работает как ожидается то можно вставлять в генератор.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38815884
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

Здравствуйте.



>> Общий темплейт: Студент идет к пруду .

>как систем принимает этот темплате?
>он один вводится с консоли?

Всего темплейтов около 500, они заведены в систему жестко и вводятся только администратором. Пользователь выбирает один нужный в форме, ну то есть в приложении. И еще он выбирает для него нужные направления и атрибуты.
Атрибуты так же лежат в справочнике, пользователь его не редактирует, только выбор.
И направления тоже лежат в справочники, пользователь его не редактирует. Он вообще ничего не редактирует, только выбирает.

>стоп. кто задает какие под-группы имеются для каждой категории слов?
>Это глобальные (для всех) настройки или на каждого пользователя свои?

Глобальные.

> Этот выбор обязательный? или кто-то может ничего не выбирать?

Направление обязательное, атрибуты необязательные.

>> Тогда там будет в tbl_templatedetail td join tbl_l_templatedetail_subdirection ts
>> on td.Id_SubDirection = ts.Id_SubDirection
>> т.е должны отобраться только студент/офицер/спортсмен.

>логика не сложная и понятная. Но вот с названиями таблиц -- беда --
>субдиркшн? может лучше назвать filter_group.
>Можно ли убрать префикс ТБЛ_ у всех таблиц?

А зачем? Меня так учили, давать префиксы, v_, tbl_, p_ и так далее, чтобы по взгляду на код было понятно, что происходит.


>> Соответственно получается так вот так:
>> select n.Noun from tbl_templatedetail td
>> join tbl_l_templatedetail_subdirection ts on td.Id_SubDirection = ts.Id_SubDirection
>> Join tbl_l_noun_subdirection sn on on ts.Id_SubDirection = sn.Id_SubDirection
>> join tbl_noun n on sn.Id_noun = n.Id_noun;

ВЫглядит нормально, проверьте на тестровых данных.
Если работает как ожидается то можно вставлять в генератор.

Если бы. :( Это получается подзапрос, вместо того, что раньше писал tangir. Там была одна таблица tbl_noun, а теперь должен стать вот этот подзапрос. НО ! Здесь нет конкретной привязки к главному запросу и будут выбраны существительные из всех возможных деталей теплейта, а надо ведь только для одного.

Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from tbl_templatedetail td
join 
(select n.Noun, ts.Id_TemplateDetail from tbl_templatedetail td
join tbl_l_templatedetail_subdirection ts on td.Id_SubDirection = ts.Id_SubDirection
Join tbl_l_noun_subdirection sn on on ts.Id_SubDirection = sn.Id_SubDirection
join tbl_noun n on sn.Id_noun = n.Id_noun
) nt on td.ts.Id_TemplateDetail = nt.ts.Id_TemplateDetail;



Как-то вот так, но это у меня не работает.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38816536
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Общий темплейт: Студент идет к пруду .

>как систем принимает этот темплате?
>он один вводится с консоли?

Всего темплейтов около 500, они заведены в систему жестко и вводятся только администратором. Пользователь выбирает один нужный в форме, ну то есть в приложении. И еще он выбирает для него нужные направления и атрибуты.
Атрибуты так же лежат в справочнике, пользователь его не редактирует, только выбор.
И направления тоже лежат в справочники, пользователь его не редактирует. Он вообще ничего не редактирует, только выбирает.

OK -- это надо добавить в описание задачи

>стоп. кто задает какие под-группы имеются для каждой категории слов?
>Это глобальные (для всех) настройки или на каждого пользователя свои?

Глобальные.

OK -- это надо добавить в описание задачи

> Этот выбор обязательный? или кто-то может ничего не выбирать?

Направление обязательное, атрибуты необязательные.

OK -- это надо добавить в описание задачи

>> Тогда там будет в tbl_templatedetail td join tbl_l_templatedetail_subdirection ts
>> on td.Id_SubDirection = ts.Id_SubDirection
>> т.е должны отобраться только студент/офицер/спортсмен.

>логика не сложная и понятная. Но вот с названиями таблиц -- беда --
>субдиркшн? может лучше назвать filter_group.
>Можно ли убрать префикс ТБЛ_ у всех таблиц?

А зачем? Меня так учили, давать префиксы, v_, tbl_, p_ и так далее, чтобы по взгляду на код было понятно, что происходит.

Это устаревшая система. В СКЛ тип идентификатора легко
определяется позицией, например в блоке FROM могут быть
только таблицы , вью или подселекты. Иногда используются
суффиксын промер _V для вьюшек. Если таблиц много,
то префиксы иногда используют для разделения на бизнес секции,
напромер CS_ customer service, PD_ таблицы для продуктов и категорий...
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38816560
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomsk,

Про подзапрос на под-дирекции -- варинатов два --

1) ждать Танглира

2) собрать с самого начала все срипты
-- создания таблиц,
-- заполнение тест-данными (включая таблицы сабдирекшн)
(2-3 темплейта, 3-4 слова каждого типа, парочка субдирекшенов)
-- работаюший генератор кода
-- СКЛ который выдает кодгенератор на конкретных данных
-- результат который выдает сденерированый СКЛ.
-- результат который надо получить отфильтровкой по сабдирекшеном.

Убедитесь что ваш пакет можно развернуть на чистой базе данных и
запостите сей пакет сюда.
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38819184
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcСейчас, если Танглир или кто еше будут решать вторую половину задачи
(настройки выбора слов) им придется опять лезть в 35 предыдуших постов
стобы восстановить понимание таблиц и связок.Ну в принципе структура без обоих субдирекшенов у меня есть (правда, написанная мной где-то в середине темы, так что названия таблиц там другие).
И даже вроде понятно, что такое наун_субдирекшен - это вроде как "группы слов (существительных)", причём - судя по тексту запроса - каждое слово может состоять только в одной группе.
А вот что такое темплейт_субдирекшен - я, честно говоря, не пойму. Вроде как каждое слово темплейта может принадлежать к одной (и только одной) группе, но что это за группы? и чем они отличаются от групп, задаваемых для частей речи?..

...стоп, не так :) читаю вот это:
Код: sql
1.
2.
3.
4.
select n.Noun from tbl_templatedetail td
join tbl_l_templatedetail_subdirection ts on td.Id_SubDirection = ts.Id_SubDirection
Join tbl_l_noun_subdirection sn on on ts.Id_SubDirection = sn.Id_SubDirection
join tbl_noun n on sn.Id_noun = n.Id_noun

и ничего не понимаю.
Тут у нас есть 2 набора групп - один для слов темплейта, второй для существительных. При этом ид группы - одинаковый что там, что там . ЯНП, а зачем вообще делать 2 набора групп, если они друг друга тупо дублируют??
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38820795
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Здравствуйте.


Про группы я постараюсь очень обьяснить. Получается так:

Пользователь выбирает теплейт, например вот этот:

Студент идет к морю. Есть некоторые дополнительные условия, которые заранее определяет администратор: речь может идти о мужчинах, о молодых людях, об учащихся и так далее, таких условий много разных.
Это храниться в таблице tbl_subdirection.

Потом администратор определяет для данного темплейта какие именно subdirection можно использовать в каких именно позициях. Это храниться в tbl_template_subdirection.

Потом пользователь на форме (у меня это еще не готово) выбирает нужный темлейт и нужное направление. Как я уже писала, например, id_subdirection = 1. Это "молодые люди".

А дальше должны отобраться только те существительные, которым администратор заранее тоже определил свойство "молодые люди".
Например, "солдат/школьник/студент". Вот.

Поэтому вот они не совсем друг друга дублируют, в одном случае это направление для собственно темплейта, а во втором для частей речи.

Может быть, мы с вами можем куда-нибудь перейти для обсуждения, в емейл или еще куда-то?
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38821741
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaTomskПотом администратор определяет для данного темплейта какие именно subdirection можно использовать в каких именно позициях . Это храниться в tbl_template_subdirection.Тут не всё понятно. Получается, админ для каждого слова в шаблоне задаёт (ну или не задаёт) "направление"? И, как я понимаю, их может быть несколько (для каждого слова)? иначе зачем вообще эта доп.таблица...
ElenaTomskПотом пользователь на форме (у меня это еще не готово) выбирает нужный темлейт и нужное направление. Как я уже писала, например, id_subdirection = 1. Это "молодые люди".Он может выбрать только одно направление или несколько? Предполагаю второй вариант, но мало ли...
ElenaTomskА дальше должны отобраться только те существительные, которым администратор заранее тоже определил свойство "молодые люди".Ага. То есть список направлений (имхо лучше бы это были "фильтры" или "теги") всё-таки общий как для шаблонов, так и для слов, и хранится он в tbl_subdirection?
PS. Сейчас болею, так что соображаю не очень (
PPS. почта на листру
...
Рейтинг: 0 / 0
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #38823435
ElenaTomsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Здравствуйте.

1. Да, для каждого слова может задаваться одно или несколько направления.
2. Конечно, несколько.
3. На все вопросы: да, вы все правильно поняли.

Вот я вас про емейл не поняла, извините. Оставлю свой, вот : gedver@bk.ru
...
Рейтинг: 0 / 0
88 сообщений из 88, показаны все 4 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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