powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
25 сообщений из 88, страница 2 из 4
перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
    #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
25 сообщений из 88, страница 2 из 4
Форумы / MySQL [игнор отключен] [закрыт для гостей] / перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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