|
|
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2014, 10:22:10 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 andrejk , Правила форума на SQL.RU (v1.0) , смотрите пример в рекомендациях Пронумеруйте правила, чтобы точнее указывать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 11:08:41 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Ещё раз всем спасибо, кто потрудился написать мне для примера код. Попыхтел и вот что получилось (за основу взял код Cygapb-007 (случайно, просто по очереди пытался все предложенные решения под себя переделать и этот первый подддался), но и код от tanglir тоже разбира, буду сравнивать, учиться короче): tn (idn, n) — таблица наборов слов. ts (ids, s) — таблица слов. t_s (id_n, id_s) — таблица связей между наборами и словами. $oporn_slova — строка слов, вводимых пользователем вначале для подбора по ним. $kolichestvo_opornyx_slov — количество изначально введённых опорных слов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но у меня всё равно остались вопросы, потому, что переделать код под себя я пока смог без полного просветления, только с какой-то внутренней чуйкой. Ещё буду со всеми предложенными вариантами через ДЖОИНЫ разбираться. Вот вопросы: 1 — не могу понять, в каком порядке БД выполняет код. Подставьте, пжлста, цыферки, что за чем выполняется. 2 — я так понял, сдесь вложенность ДЖОИНОВ? 3 — что изменит раскомментированный /*distinct*/? 4 — с псевдонимом g не понятно. Это псевдоним какой-то новой таблицы? Откуда потом появылось g.id_n? 5 — не понятно, count(*) ведь считает количество строк, как он посчитал количество слов по отдельности, чтоб потом по нему сортировать? Вот как-то так. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 11:28:03 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglir, не могли бы вы повторить свой код, но уже с моими новыми короткими названиями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 11:38:51 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
1) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. как-то так 2. Не джойнов, а запросов. "Вложенных джойнов", насколько я понимаю, не может быть в принципе. 3. Это на случай, если у вас могут быть дублирующиеся записи в таблице связей. В случае, когда у вас есть только связи, без какой-либо доп. информации о них (т.е. в таблице связей есть только 2 поля: ид1 и ид2), повторов быть и так не должно, ну и дистинкт тогда не нужен. 4. g - псевдоним для результата подзапроса. Того, что выполняется в скобках. 5. На верхнем уровне выводятся 2 поля: первое - само слово, второе - количество повторов этого слова. Сортировка выполняется после группировки; количество повторов - обычное поле результата, по нему спокойно можно сортировать. Почитайте хотя бы Грабера, что ли. Для понимания этого запроса будет имхо вполне достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 11:57:49 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Обнаружил косяк. Не то чтобы он на что-то повлиял, id_s всё-так первичный ключ, но лучше всё-таки сделать так Код: sql 1. 2. 3. 4. Это мускль добрый, а другие сервера такой запрос выполнять откажутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 11:59:32 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirОбнаружил косяк. Не то чтобы он на что-то повлиял, id_s всё-так первичный ключ, но лучше всё-таки сделать так Код: sql 1. 2. 3. 4. Это мускль добрый, а другие сервера такой запрос выполнять откажутся. 1 — Там два места группировки, в каком поменять? И почему откажутся, какая тут тонкость? 2 — Откуда потом появилось g.id_n? Что из себя представляет g? Таблицу с полями? Я та понимаю, что виртуальную, временную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:19:16 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirОбнаружил косяк. Не то чтобы он на что-то повлиял, id_s всё-так первичный ключ, но лучше всё-таки сделать так Код: sql 1. 2. 3. 4. Это мускль добрый, а другие сервера такой запрос выполнять откажутся. Косяк этот в примере от 007 или в вашем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:22:07 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:29:30 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirОбнаружил косяк. Не то чтобы он на что-то повлиял, id_s всё-так первичный ключ, но лучше всё-таки сделать так Код: sql 1. 2. 3. 4. Это мускль добрый, а другие сервера такой запрос выполнять откажутся.Не то чтобы косяк - форум по MySQL, поэтому другие сервера как бы до лампочки. То же замечание, буде возникнет, относится к SUM(a=1) вместо SUM(case when a=1 then 1 else 0 end) Ваша же замена может быть не идентичной, правильнее так: select ts.s ... group by ts.id,ts.s ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:42:39 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglir, Код: sql 1. 2. 3. 4. 5. 6. 7. Здесь есть несоответствие в количестве выводимых строк в столбце «с» (одна строка, в которой сумма) и строк в других столбцах (по три в каждом)? Я правильно понял этот пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:50:16 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Имел ввиду до группировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:52:27 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Cygapb-007group by ts.id,ts.s Подставил это и выдало ошибку. Может я чё не так… Если просто подставить group by ts.s, то не выдаёт ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:59:46 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkCygapb-007group by ts.id,ts.s Подставил это и выдало ошибку. Может я чё не так… Если просто подставить group by ts.s, то не выдаёт ошибок. конкретно в вашем примере - Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 13:40:51 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Спасибо, но можете хотябы в двух словал пояснить, всё же, в чём особенность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 13:52:56 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkСпасибо, но можете хотябы в двух словал пояснить, всё же, в чём особенность? если я правильно понял вопрос, то я имел в виду, что для select id,s,sum(val) from idsval111212224 group by id даст совсем не то же, что и group by s правда, group by id,s тоже даст другой результат, так что может я и не по делу выступил... Особенность в том, что MySQL позволяет, в отличие от других СУБД, не перечислять все неагрегатные поля в списке группировки. При этом предполагается, что все такие поля содержат одно и то же значение для всех строк группы, поэтому неважно, из какой конкретно строки их можно включить в результат. Большой минус такого подхода - излишняя доверчивость сервера к разумению автора запроса (проверка на наличие различных значений не делается никогда), из-за чего при наличии различных значений в не агрегатных и не группируемых полях может привести к различным (не детерминированным) результатам запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 14:52:07 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Не нашёл, что такое агрегатные поля, только про функции пищут. Что это за поля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 15:43:35 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglir, «Почитайте хотя бы Грабера, что ли. Для понимания этого запроса будет имхо вполне достаточно.» Не укажете название книжечки, если она на русском? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 15:45:57 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Товарищи, похоже, он нас троллит. https://www.google.ru/search?q=грабер sql Первая(!) же ссылка - http://www.sql.ru/docs/sql/u_sql/ На русском! И даже качать не надо, *****, не то что покупать - открывай и читай! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 16:03:42 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkНе нашёл, что такое агрегатные поля, только про функции пищут. Что это за поля? select id,s,sum(val) from tab group by id id, s - поля таблицы, причем id входит в группировку (вроде бы можно назвать его агрегируемым), а s - не входит sum(val) - агрегатная функция Так вот, все СУБД требуют (и это правильно), чтобы в группировке были перечислены все поля из списка запроса, не входящие в агрегатные функции (т.е. как ID, так и S: group by id,s ). Особенностью MySQL является то, что это требование по умолчанию отключено. При этом MySQL считает, что для каждого значения ID в выборке присутствует только одно значение S. Типичная ошибка - нарушение этого предположения. В этом случае в итоговую выборку попадает одно из значений S, причем предсказать, какое именно (первое, последнее, промежуточное) - заранее невозможно. Код: sql 1. 2. 3. 4. 5. 6. 7. непредсказуемо вернет либо (2,1,7), либо (2,2,7), либо (2,3,7) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 16:04:04 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirТоварищи, похоже, он нас троллит. https://www.google.ru/search?q=грабер sql Первая(!) же ссылка - http://www.sql.ru/docs/sql/u_sql/ На русском! И даже качать не надо, *****, не то что покупать - открывай и читай! нет, похоже, что я уже закипаю — http://yandex.by/yandsearch?text=граббер mysql&lr=155 ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 16:17:24 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, потому что книга Грабера - она, *****, не про МАЙэскуэль, она про ВООБЩЕ эскуэль. Про стандарт. И про суть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 16:24:40 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
А это результат моего труда и вашей помощи, чтобы не думали, что я троль — http://slova.andrej.by/ И это я почти с нуля за неделю сделал. А вы с нуля через какое время написали действующий, пусть и крошечный, пусть и для себя, но сервисик? (Да, я ТРОЛИЩЕ — и протролил и прорекламил) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 16:25:34 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, вводим "13';select 1 from dual;'", на следующей странице получаем "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/webart/www/slova.andrej.by/index_2.php on line 77". Ну и смысла я не понял - "собрать", потом "подобрать"... что оно делает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 16:37:31 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Здесь ещё нет проверки и очистки введённых данных. Что делает? Решает мои узкоспециализированные задачи) Чтобы не придумывать каждый раз слова, которые уже придумал, а видеть их перед собой и просто ставить птички. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 16:42:33 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38705163&tid=1834285]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 303ms |

| 0 / 0 |
