|
|
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Делаю обьединение и по умолчанию ставлю разделитель пробел. Получается вот так: "Студент , заботливо подающий зачетку , особенно любим преподавателем . " Каждое слово включая знаки препинания находится в отдельной строке и все это в кучу собирается. А как бы сделать, чтобы знаки препинания были как положено в русском языке - слитно с предыдущим словом и отдельно от следующего? Вот так: "Студент, заботливо подающий зачетку, особенно любим преподавателем." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 00:31:06 |
|
||
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
А из каких данных строку собираете? Пока единственное что приходит в голову - корректировать потом REPLACE-ом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 00:46:05 |
|
||
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
miksoftА из каких данных строку собираете? перемножить все имеющиеся варианты слов - помогите, пожалуйста ! !!! же :) Елена, тут 2 варианта: 1)как сказал миксофт, корректировать реплейсом (но для этого придётся либо хардкодить в корректирующий запрос всё содержимое таблицы punctuat либо собирать этот запрос на лету); 2) (я понимаю, что реализация уже 100 раз поменялось, но идея-то скорее всего осталась) вместо Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. делать так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Простыми словами - вместо возложения работы по добавлению пробелов на кляузу "сепаратор" вписать их вручную где надо (а где не надо - не вписывать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2015, 08:13:01 |
|
||
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
tanglir, Здравствуйте! Очень приятно, что вы меня помните. По-моему, вариант с replace более удобен. Конечно, вы правы, я уже почти все переделала. Очень упростила. Сделала так: все слова и пунктуацию в одну таблицу. Еще одну таблицу с группами возможных замен. И таблицу возможных деталей тоже упроситла, но все равно нужна помощь, до конца не могу додуматься, как сделать просто перемножение всех слов. сейчас получается Студент NULL NULL Идет NULL Бежит NULL Скачет NULL Ползет NULL Прыгает По NULL NULL Дороге NULL Тропинке Умножение-то правильное, но как теперь из этого получить общий итог в виде предложений со всеми этими вариантами, пока не знаю. Начинаю городить процедуры, временные таблицы и чувствую, что не туда заносит, что можно проще как-то. Может быть, вы сумеете мне помочь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 20:36:02 |
|
||
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
ElenaTomsk, получается так: Код: sql 1. 2. 3. тут все слова во всех формах и каждое из них с уникальным id Дальше я в отдельную таблицу tbl_groupdetail Код: plsql 1. 2. 3. И тогда получатся тут: И заношу, скажем, такие слова: Id_groupdetail id_group id_word 1 1 5 2 1 12 2 1 17 Это "бежит", "скачет", "идет" А дальше совсем просто, как мне кажется: Код: sql 1. 2. 3. 4. 5. 6. И заполняю: Код: sql 1. 2. 3. Получается, что там, где слова менять не надо, там id группы null, а id слова выбирается через left join А там, где надо - там id group не null и тогда выбирается id_group и через него те слова, которые тут могут быть на замену. Код: sql 1. 2. 3. 4. 5. Как этот запрос переделать, чтобы было в итоге 1 Студент бежит 2 Студент идет 3 Студент скачет и это, конечно, самый просто еще вариант, всего строк в tbl_detailtemplate на один id_template может быть до 40, там и группы могут быть штук по 7. Чувствую, что все-таки можно одним запросом, но доказать не могу. А может, и не будет одним запросом быстро, а действительно надо как-то с временными таблицами. Тут еще вот какая загвоздка: слова в предложении должны быть уникальными. Если же я в рамках одного темлейта указываю одну группу несколько раз, то: Код: sql 1. 2. 3. 4. 5. Может получиться так: Студент идет и идет. Студент бежит и бежит. Студент скачет и скачет. А надо, чтобы внутри одного предложения слова не повторялись, даже если они из одной группы: Студент бежит и скачет Студент бежит и идет Студент идет и скачет Студент идет и бежит Студент скачет и идет Студент скачет и бежит Вот тут я думала, что надо отбирать слова в временную таблицу и при дальнейшей выборке каким-то циклом проверять, нет ли уже слова с таким id в этой временной таблице. Как правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 21:10:15 |
|
||
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
ElenaTomsk, вечером почитаю, постараюсь вникнуть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2015, 06:48:38 |
|
||
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
ElenaTomskКак этот запрос переделатьВозвращаясь к тому, с чего в тот раз начинали - если вы хотите получить конечный результат одним запросом, то в нём не может быть фиксированного количества джойнов. Т.к. каждая группа = перебор, а каждый перебор = отдельный джойн. ElenaTomskМожет получиться так: Студент идет и идет. Студент бежит и бежит. Студент скачет и скачетхмм... у меня получилось idid_templateid_mwordid_groupidmwordidid_groupid_mwordidmword1498\N98 студент \N\N\N\N\N24\N1\N\N311717 идёт 24\N1\N\N1155 бежит 24\N1\N\N211212 скачет 34189\N189 и \N\N\N\N\N44\N1\N\N211212 скачет 44\N1\N\N311717 идёт 44\N1\N\N1155 бежит Каким образом вы из этого собираете, к примеру, "студент идёт и идёт" - я не знаю, поэтому посоветовать ничего не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2015, 14:26:29 |
|
||
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
tanglir, Тот запрос, который я привела, он нерабочий :(, это только пример. Мне надо в итоге получить шесть предложений. Или больше, если в группе больше вариантов, чем "бежит, идет, скачет". Перемножить их все между собой, а основные слова не менять. "Студент" and "и" не меняются, а остальные должны меняться. Вот так: Студент идет и бежит. Студент идет и скачет Студент бежит и идет Студент бежит и скачет Студент скачет и бежит Студент скачет и идет. Вы предлагаете собирать запрос под это вручную, но у меня не хватает соображения, как это сделать. Я вижу только вариант с подзапрос: Код: sql 1. на каждую строку, у которой id_group is not null. И вот если таких строк 4-5 и более, то вероятность, что order by rand() отсортирует слова в ранее уже встречавшемся варианте велика. Т.е упрошая до максимума: id_detailtemplate Id_group 1 1 2 Null 3 1 4 Null 5 1 далее join с tbl_detailgroup, в которой лежит три слова: "бежит, идет, скачет". И гарантии, что я не получу один и тот же вариант в позициях 1, 3, 5, например "скачет", "скачет", "скачет" нет. А такой скакун не нужен. :( Как можно сделать, чтоб если бы уже отобрано в позиции 1, например, id_detailgroup 2 (бежит), то чтобы в 3 и 5 это уже не попадало? Никак не вижу сама возмножности без перебора построчно временной таблицы. Идея такая, что отобрала id в какую-то временную таблицу, а дальше уже запрос: Код: sql 1. превратиться в такое: Код: sql 1. 2. 3. Только какая-то кривая очень безобразия получается. Очень надеюсь, что есть другой путь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2015, 17:48:56 |
|
||
|
Group_concat и лишние проблелы
|
|||
|---|---|---|---|
|
#18+
А вот еще появилась такая идея: посчитать, сколько раз конкретно используется группа через count, group by и тогда брать запросом не limit 1, a limit числовхожденийэтойгруппы. Может, конечно, я опять невнятно объясняю, но кроме как здесь мне посоветоваться совсем не скем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2015, 23:18:51 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1833515]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 364ms |

| 0 / 0 |
