|
|
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Есть имя файла, его полный путь и ключевые слова. Имя и, соответственно, полный путь у каждого файла уникальны. У каждого файла может быть неограниченое число ключевых слов (без повторений). Подозреваю, что тут придётся использовать внешние ключи, но не соображу как. Пробовал всё в одну таблицу впихнуть (поля: имя(varchar), путь(varchar), слово1(boolean), слово2(boolean)…словоN(boolean)), но как-то не симпатично иметь таблицу с парой тысяч полей под все ключевые слова, тем более, что, вроде, есть ограничение на количество полей. Думаю вынести ключевые слова в отдельную таблицу с парой полей (например, id и slova) и как-то связать некоторые их id с соответстующими файлами в другой таблице, так, чтобы выводя название файла, с ним выводились и его ключевые слова. Помогите, пожалуйста, организовать бд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 10:47:35 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, как вариант три таблицы: 1) таблица файлов с полями: id_file file_name 2)таблица слов : id_word word_name 3) таблица связей: id_file id_word ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:01:58 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Если сократить идентификаторы и оставить только имя и слово (они по условию уникальны, т. е. грубо говоря могут сами быть идентификаторами), то разве не получится таблица связей в виде «file_name, word_name» вместо «id_file, id_word». Если я ошибаюсь, то тогда объясните, пожалуйста, как эти связи использовать, ведь к одному файлу принадлежат сразу несколько десятков ключевых слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:23:08 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Получается, что для обозначения принадлежности к одному файлу сразу нескольких слов, в таблице связей придётся либо айди/имя файла повторять для разных слов либо айди/имя слова повторять для разных файлов? Это нормальная избыточность? Использование идентификаторов в этом случае только ускорят процессы, но для логики они не нужны (повторюсь, что имена файлов и слова по условию уникальны). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:29:58 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЕсли сократить идентификаторы и оставить только имя и слово (они по условию уникальны, т. е. грубо говоря могут сами быть идентификаторами), то разве не получится таблица связей в виде «file_name, word_name» вместо «id_file, id_word». Если я ошибаюсь, то тогда объясните, пожалуйста, как эти связи использовать, ведь к одному файлу принадлежат сразу несколько десятков ключевых слов. Все можно, но числовой ключ на мой взгляд все-таки лучше чем varchar. Если делать "file_name, word_name" - то в других таблицах нет необходимости. На мой взгляд таблица с именем файлов может содержать и др. инфу (размер, дату, кто предоставил...) Со словами - одно слово может относиться к разным файлам. Дело вкуса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:30:11 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkПолучается, что для обозначения принадлежности к одному файлу сразу нескольких слов, в таблице связей придётся либо айди/имя файла повторять для разных слов либо айди/имя слова повторять для разных файлов? Это нормальная избыточность? Использование идентификаторов в этом случае только ускорят процессы, но для логики они не нужны (повторюсь, что имена файлов и слова по условию уникальны). Ну почему же это избыточность? Есть такое понятие как нормализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:33:30 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Да, в таблицу с именем файлов будут помещены ещё и пути к ним. Это добавляет жизни третьей таблице связей. Я отолько учусь (самостоятельно. Кстати почитал только что про нормализацию, спасибо:-)), поэтому переспрошу ещё раз — вот такое наполнение таблицы связей нормальное получается?: id_file_1 — id_word_34 id_file_1 — id_word_35 id_file_1 — id_word_31 id_file_1 — id_word_98 id_file_1 — id_word_56 id_file_1 — id_word_42 id_file_1 — id_word_12 id_file_2 — id_word_54 id_file_2 — id_word_22 id_file_2 — id_word_34 id_file_2 — id_word_11 id_file_2 — id_word_09 id_file_3 — id_word_22 id_file_3 — id_word_23 Это нормально, что так много id_file одинаковых? Их как-то можно сократить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 11:52:09 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkДа, в таблицу с именем файлов будут помещены ещё и пути к ним. Это добавляет жизни третьей таблице связей. Я отолько учусь (самостоятельно. Кстати почитал только что про нормализацию, спасибо:-)), поэтому переспрошу ещё раз — вот такое наполнение таблицы связей нормальное получается?: id_file_1 — id_word_34 id_file_1 — id_word_35 id_file_1 — id_word_31 id_file_1 — id_word_98 id_file_1 — id_word_56 id_file_1 — id_word_42 id_file_1 — id_word_12 id_file_2 — id_word_54 id_file_2 — id_word_22 id_file_2 — id_word_34 id_file_2 — id_word_11 id_file_2 — id_word_09 id_file_3 — id_word_22 id_file_3 — id_word_23 Это нормально, что так много id_file одинаковых? Их как-то можно сократить? Хочешь ты этого или нет, но связь файл - слово должна быть (или id_файла - слово или id_файла - id_слова). Или использовать другой подход: "файл" - 'слово1;слово2;... словоN' - одна строка, где слова приведены через разделитель. Все подходы имеют право на жизнь, их нужно учитывать при поиске. (для другого подхода последовательность слов - важна и искать like '%слово1%слово2%' вернет результат, а искать like '%слово2%слово1%' - нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:03:54 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly BИли использовать другой подход: "файл" - 'слово1;слово2;... словоN' - одна строка, где слова приведены через разделитель. Т. е. в одном поле name_word будут целые строки из слов с разделителями? Не. лучше пусть в таблице связей будут повторения. Получается так: мы запрашиваем слово, бд ищет его айди, потом в таблице связей ищет все строки со значением нашего айди в поле id_file и массивом выводит все соответствующие значения из поля id_word? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:14:30 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
* мы запрашиваем ФАЙЛ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:16:05 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk* мы запрашиваем ФАЙЛ Ну да, можно одним запросом: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:18:27 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Спасибо, буду ковыряться дальше пока. Попробую оргранизовать тройную табличность и проверю логику необходимого функционала с ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 12:34:50 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Посчитал тут длинну таблицы связей в строках и мне плохо стало))) Предположим, что будет 100,000 пользователей, у каждого пользователя по 100,000 файлов, у каждого файла по 50 ключевых слов — итого: 100,000×100,000×50=500,000,000,000 (строк). Это нормально???))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 15:48:22 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkПредположим, что будет 100,000 пользователей, у каждого пользователя по 100,000 файлов, Гы, мене нравятся цифры - тогда нужно вопрос задавать как оптимизировать хранение и поиск в большом объеме данных. 100 тыс - прогнозируемая заполненность из реальной жизни? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 16:10:21 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly BГы, мене нравятся цифры - тогда нужно вопрос задавать как оптимизировать хранение и поиск в большом объеме данных. 100 тыс - прогнозируемая заполненность из реальной жизни? Пока теоретически. Но какая разница, а вдруг) Что потом делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 16:36:24 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Да, кстати — как оптимизировать хранение и поиск в большом объеме данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 16:37:15 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, перед тем как кодить, сначала проводят анализ для чего это делается, какие поиски будут, по каким критериям, каков ориентировочный объем,... Если данных много и их можно поделить на более мелкие "аля независимые части" можно сделать партицирование (скажем партиции по первой букве слова). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 17:10:17 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly B, Т. е. эти 500 млд строк просто разбить на таблицы — сделать из одной таблицы связей несколько? Я к чему: т. е. принципиально ничего в логике не поменяется, просто облать выборки сузится за счёт разделения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 17:56:57 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЕсть имя файла, его полный путь и ключевые слова. Имя и, соответственно, полный путь у каждого файла уникальны. У каждого файла может быть неограниченое число ключевых слов (без повторений). Подозреваю, что тут придётся использовать внешние ключи, но не соображу как. Пробовал всё в одну таблицу впихнуть (поля: имя(varchar), путь(varchar), слово1(boolean), слово2(boolean)…словоN(boolean)), но как-то не симпатично иметь таблицу с парой тысяч полей под все ключевые слова, тем более, что, вроде, есть ограничение на количество полей. Думаю вынести ключевые слова в отдельную таблицу с парой полей (например, id и slova) и как-то связать некоторые их id с соответстующими файлами в другой таблице, так, чтобы выводя название файла, с ним выводились и его ключевые слова. Помогите, пожалуйста, организовать бд. как вариант (может и не подойти): http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html теряется структура тегов, зато сработает из коробки. Теги просто навалить в стринговое поле через пробел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 20:27:51 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Не, ребята, для меня это ещё круто, да ещё на английском. Я пока пытаюсь в общем сложить конструктор в голове и попробовать простую реализацию, используя базовые знания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 21:11:01 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 05:54:55 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirandrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног... Как же зае**ли умники на всех форумах. Я не знаю, будет у меня 500 млрд записей или нет, я их и не собираюсь делать, и скорее всего не будет, но ведь теоретически такая ситуация возможна, не обязательно у меня, а вообще возможна — ТАК ВОТ, бл?*:!, Я ПРОСТО ХОЧУ ЧЕЛОВЕЧЕСКОГО ОТВЕТА, КАК, бл?*:!, В ТАКИХ СЛУЧАЯХ ПОСТУПАЮТ. за***ли уже узколобые, которые не могут понять простой вещи, что люди спрашивают не только из практических нужд, но иногда еще и из гепотетических. Ну вот, бл?*:!, мне интересно… Достали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 08:34:10 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЯ не знаю, будет у меня 500 млрд записей или нетЗато я знаю. Не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 12:03:53 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkТАК ВОТ, бл?*:!, Я ПРОСТО ХОЧУ ЧЕЛОВЕЧЕСКОГО ОТВЕТА, КАК, бл?*:!, В ТАКИХ СЛУЧАЯХ ПОСТУПАЮТ? Итак, уважаемый andrejk, вы хотели узнать andrejkкак оптимизировать хранение и поиск в большом объеме данных? Ответ такой: забудьте про оптимизацию и поиск. Если вы разработали правильную продуманную структуру БД, то вопросы оптимизации и поиска за вас будет решать уже программа (она называется СУБД). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 13:30:36 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
ТриггерманЕсли вы разработали правильную продуманную структуру БД, то вопросы оптимизации и поиска за вас будет решать уже программа (она называется СУБД). Разработка продуманной структуры - первый шаг оптимизации, да и поиски должны быть продуманы перед заполнением таблиц. Как СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 13:40:23 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly B, Всё, что вы сможете сделать - это разработать грамотную структуру БД. Всё остальное - будут делать СУБД и железо, на котором она работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 13:50:02 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЯ пока пытаюсь в общем сложить конструктор в голове и попробовать простую реализацию, используя базовые знания. andrejkДа, кстати — как оптимизировать хранение и поиск в большом объеме данных? Раздели эти две задачи. Реши первую, проверь макс. задержки, найди что не нравится..... По оптимизации погугли общие рекомендации, поищи книжечки, статейки. Ну а в целом каждая задача имеет свои особенности. Если строк в таблице ... ну очень много, для этого есть свои СУБД, для примера Elasticsearch. Но это уже 2 задача ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 13:51:02 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Anatoly BКак СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш? Будет держать в кэше только активную часть данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 15:06:42 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Понятное дело, что теоретически бд может расти бесконечно, тут ничего не поделаешь. Проблема, которую я хочу решить, это избавиться от роста в геометрической прогрессии, т. к. трёхтабличная архитектура бд (как предлагалось выше и как я пробую сделать) вынуждает поле связей расти сразу на несколько десятков строк при добавлениии в бд всего одного файла с ключевыми словами. Чтобы было понятно, попробу изложить задачу и текущий алгоритм решения. Задача: — вносить в бд с одной стороны ключевые слова, а с другой информацию о файле (его имя и путь к нему); — закреплять за этим файлом (привязывать к нему) некоторые ключевые слова; — по заданному ключевому слову искать в бд все другие ключевые слова, привязанные к файлам, к которым привязано и заданное ключевое слово; — выводить найденные ключевые слова списком с сортировкой по частоте встречания в пределах условия поиска. А вот как я решил запрос к бд (спасибо Anatoly B за скелет запроса): <?php if ($_POST["podobrat"] & $_POST["kluch_slovo"]) { $podkluchenie = mysql_connect("***","***","***") or die("MySQL сервер недоступен!".mysql_error()); mysql_query(" SET character_set_database=utf8 "); mysql_query(" SET NAMES utf8 "); mysql_select_db( "webart_servis_kluchevyx_slov", $podkluchenie) or die("MySQL сервер недоступен!".mysql_error()); $kluch_slovo = $_POST["kluch_slovo"]; $rezultat_podbora = mysql_query(" SELECT `slova` FROM `tablitzca_slov` WHERE `id` in (SELECT `id_slova` FROM `tablizca_svyazej` WHERE `id_izobrazheniya` in (SELECT `id_izobrazheniya` FROM `tablizca_svyazej` WHERE `id_slova` in (SELECT `id` FROM `tablitzca_slov` WHERE `slova` = '".$kluch_slovo."'))) "); while ($data = mysql_fetch_array($rezultat_podbora)) { echo "<input type=\"checkbox\" name=\"checkbox\" checked=\"checked\"> " . $data['slova'] . "<br>"; } mysql_close($podkluchenie); } ?> Бедная получается таблица связей, расти будет как на дрожжах — это для каждого файла нужно будет прописать в ней сразу несколько строк под каждое привязанное слово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 17:51:45 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Блин, как код оформить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 17:52:25 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkБлин, как код оформить?тег [ src ] andrejkэто избавиться от роста в геометрической прогрессии , т. к. трёхтабличная архитектура бд (как предлагалось выше и как я пробую сделать) вынуждает поле связей расти сразу на несколько десятков строк при добавлениии в бд всего одного файла с ключевыми словами.Это не геометрическая прогрессия. Геометрическая - это если бы для каждого нового файла приходилось бы добавлять в N раз больше записей, чем для предыдущего. И даже не арифметическая :) Ну а как вы хотели? Или так, или пихать все слова в одну строку. Недостатков у такого решения имхо больше: 1)не факт, что это будет занимать меньше места; если слова часто повторяются, то скорее будет даже больше 2)поиск по обычным индексам в таком варианте пролетает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 05:04:22 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirЭто не геометрическая прогрессия. … И даже не арифметическая Это я так страху нагоняю)) А вы бы как решили такую задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 06:03:53 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, либо этот вариант, либо все ключевые слова в одно поле рядом с файлом, и полнотекст на это поле. В рамках мускля других вариантов пожалуй что и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 06:38:49 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Думал ещё такой вариант — всё в одну таблицу: | имя файла | слово1 | … | словоN | //строка полей ============================= | имя1 | false | … | true | ------------------------------------- | имя2 | false | … | false | ------------------------------------- | имя3 | true | … | true | … Поиск связей между файлами и словами делается по логическим значениям true и false. Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:01:33 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkДумал ещё такой вариант — всё в одну таблицу: | имя файла | слово1 | … | словоN | //строка полей ============================= | имя1 | false | … | true | ------------------------------------- | имя2 | false | … | false | ------------------------------------- | имя3 | true | … | true | … Поиск связей между файлами и словами делается по логическим значениям true и false. Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно?Гениально! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:02:33 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
ТриггерманAnatoly B, Всё, что вы сможете сделать - это разработать грамотную структуру БД. Всё остальное - будут делать СУБД и железо, на котором она работает. Dimitry SibiryakovAnatoly BКак СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш? Будет держать в кэше только активную часть данных. Это понятно, что "впихнуть невпихуемое"(с) нельзя. Вот и вопрос как СУБД будет решать проблему оптимизации запроса, который приводит к постоянному чтению диска и лопатит тонны информации. Мой ответ - никак. Только изменяя сам запрос, наложение ограничений на рез-т и поисковые критерии ... можно (попробовать) упростить/ускорить запрос, в конце концов поделить его на более мелкие.... И это не всегда очевидно на этапе разработки структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:22:37 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkДумал ещё такой вариант — всё в одну таблицу: | имя файла | слово1 | … | словоN | //строка полей ============================= | имя1 | false | … | true | ------------------------------------- | имя2 | false | … | false | ------------------------------------- | имя3 | true | … | true | … Поиск связей между файлами и словами делается по логическим значениям true и false. Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно? Ну всё же, конкретно по такому подходу, люди добрые, что можете сказать? Anatoly B , что вы про это думаете, если сравнить с трёхтабличной архитектурой, которую вы предлагали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:35:09 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkчто вы про это думаете, если сравнить с трёхтабличной архитектурой, которую вы предлагали? Ваша архитектура - бесподобна ! Вы - творчески одаренный талантливый программист-разработчик БД. Вам бы в Microsoft работать - им такие спецы ох как нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:39:08 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Да ничего я по этому не думаю, т.к. это не вариант. Добавления нового слова - это DDL операция, т.е. требуем блокировки таблицы + долго. Битовые индексы по всем полям делать - жуть. Занимаемый дисковый размер - будет больше на больших данных... Да и работать неудобно. Какое поле (словоN или словоМ) использовать чтобы найти искомое слово , скажем, "вариант". Делать массив соответствия "имя поля - слово "? Ну и далее в таком духе ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:43:02 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Понятно, остановлюсь на таблице связей. Пока она будет расти, надеюсь, успею изучить партицирование т. д.))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 08:51:54 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. 3. 4. 5. 6. Ребята, наткнулся ещё на одну головоломку. Вот этот запрос выдаёт все слова, которые привязаны к изображениям с исходным словом. Хочу сделать возможным поиск не по одному ключевому слову, привязанному к файлу, а сразу по нескольким (от одного до бесконечности). Т. е. результирующий список ключевых слов будет извлекаться только из тех файлов, в которых есть сразу все заданные изначально слова. Проблема вот в чём: не могу сообразить, как цикл совместить с запросом. Или, может, в языке SQL есть уже подобная функция? Если понятно изложил, подскажите, пожалуйста синтаксис запроса или хотябы логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 10:46:41 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЕсли понятно изложилНе совсем. Нужно найти файлы, привязанные к такому же (или более обширному) пулу тегов, что и заданный файл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 10:54:40 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Попробую на примере. Мы задаём, например, три ключевых слова для поиска. Бд ищет все файлы, к которым привязаны сразу все три наши заданные слова. Бд проверяет у всех найденных файлов связи с другими словами и выдаёт все связанные слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 11:01:32 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
ясно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 11:10:00 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
А сам запрос Код: plsql 1. 2. 3. 4. 5. 6. изменить нельзя, только другой писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 12:32:08 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, у вас тут куча IN-подзапросов. Ещё и вложенных. Если версия мускл 5.5 и ниже, то на объёме данных, отличном от смехотворного, запрос начнёт сурово тормозить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 12:57:22 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Может тогда можно их разбить на простые? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 13:02:32 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirясно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Можете дать комментарии к синтаксису, а о в вашем примере много мне незнакомого) Не совсем понятны ваши условные обозначения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 13:04:54 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkНе совсем понятны ваши условные обозначенияа какие там вообще "обозначения"? ну разве имена таблиц, так вроде бы русскиманглийским языком написано: files - файлы, words - слова, files2words - связи (идфайла, идслова) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 13:08:34 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 16:31:42 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 http://sqlfiddle.com/#!2/b25879/1 Ого, мне с моими зачаточными знаниями синтаксиса надолго хватит разбираться) Хух, начали… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 17:07:20 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
А что это вообще за сайт, и почему там два окна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2014, 17:08:33 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, слева создание схемы дынных и её наполнение справа - собственно запрос(ы) ...там же на кнопках написано, неужели непонятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2014, 06:22:49 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Решил пока вот так (на что хватило знаний), не смейтесь) Но появилась проблемка… Вот такие ошибки выдаёт: Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /home/… on line 51 Warning: implode() [function.implode]: Invalid arguments passed in /home/… on line 64 Код: php 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. Думал с утра соображу — не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 09:11:16 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Уточнение: так происходит, если пользователь вводит только слова, которых ещё нет в БД. Если среди введённых слов есть хоть одно и в БД, то отлично выполняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 09:15:20 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkтак происходит, если пользователь вводит только слова, которых ещё нет в БД. Если среди введённых слов есть хоть одно и в БД, то отлично выполняетсяЕсли нет ни одного слова, то результатом запроса будет таблица с нулём записей. В этом случае этот цикл Код: php 1. не выполняется ни разу, а массив "$massiv_rezultata" должен создаваться как раз там. Ну и дальше пошло-поехало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 10:04:38 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
" tanglir]andrejkтак происходит, если пользователь вводит только слова, которых ещё нет в БД. Если среди введённых слов есть хоть одно и в БД, то отлично выполняетсяЕсли нет ни одного слова, то результатом запроса будет таблица с нулём записей. В этом случае этот цикл Код: php 1. не выполняется ни разу, а массив "$massiv_rezultata" должен создаваться как раз там. Ну и дальше пошло-поехало.[/quot]" Огромное спасибо, решил так: Код: php 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 10:39:03 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 http://sqlfiddle.com/#!2/b25879/1 Пробую у себя на сервере, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. [/SRC] выдаёт ошибки: #1005 - Can't create table 'webart_servis_kluchevyx_slov.tst_filekeys' (errno: 150 Percona-XtraDB, Supports transactions, row-level locking, and foreign keys ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 15:16:51 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Блин, думал что запрос делает что надо, а он, гад, выбирает всё подряд) Можно ли вот это Код: sql 1. 2. 3. 4. 5. 6. 7. изменить так, чтобы Код: sql 1. выбирал не все изображения, которым удовлетворяет хоть одно условие из Код: sql 1. 2. , а те, которым удовлетворяют сразу все условия из Код: sql 1. 2. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 16:06:02 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkа те, которым удовлетворяют сразу все условиясм.мой вариант запроса (а может, и тот, что с склфидл, не помню) - там надо неравенство на равенство поменять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 16:10:37 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirandrejkа те, которым удовлетворяют сразу все условиясм.мой вариант запроса (а может, и тот, что с склфидл, не помню) - там надо неравенство на равенство поменять Я в нём мало что понимаю. Если можешь, подставь туда мои поли и таблицы, может чё пойму. прокомментируй логику , пожалуйста. tablizca_izobrazhenij (id, izobrazheniya) tablizca_slov (id, slova) tablizca_svyazej (id_izobrazheniya, id_slova) А в моём простом варианте никак уже не вырулить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 16:41:30 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Ну хоть скажите, какие темы изучить в MySQL? Я не знаю возможностей его логики. Если просто синтаксис, то я могу почитать, но тут упёрся, что даже не знаю, что читать. Всё читать, чтоб понять, что мне поможет — это затянется… Хочется сделать, чтоб хоть как-то фурычило, хочу посмотреть вообще, что это получится, а потом править, править, улучшать и править. Мне тут ребята предлагали варианты, но я не понимаю некоторые части кода — это синтаксис там или их условные обозначения. Прошу расписать логику, что делает та конструкция, которую вы мне предлагали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 17:58:49 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Уже и так извратился — не помогает почему-то… ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 23:21:01 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
$m = 0; и $m++; лишние ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 23:24:08 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk$m = 0; и $m++; лишние Ошибся, не лишние… Уже с ума схожу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2014, 23:25:20 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЯ в нём мало что понимаю. Если можешь, подставь туда мои поли и таблицы, может чё пойму. прокомментируй логику , пожалуйста. 16310800 16311976 А в примере Сударя007 и комментарии есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 10:48:15 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Я благодарен за такие подробные примеры с комментариями, но, видно, мне нужно подучиться, чтобы их понять. Я пока не могу понять, что такое: w.нужные_поля words w f2w.idfile=f.id t0 и т. д… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 10:59:14 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkЯ пока не могу понять, что такое: >w.нужные_поля Это и есть нужные поля. Например, w.id >words w Правильней было бы написать words AS w - это задание псевдонима таблицы в запросе. Чтобы каждый раз полное имя не набирать. В моём примере в общем-то всё равно, а вот с вашими названиями таблиц сэкономит кучу места и добавит читабельности (имхо). >f2w.idfile=f.id Эээ... это условие связи. "Ид файла в таблице связей"="ид файла в таблице файлов" >t0 Опять же псевдоним, но не для имеющейся таблицы, а для результата подзапроса. >и т. д… А далее вам надо почитать что-нибудь про скл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 11:10:05 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk , если хотите конкретной помощи - укажите (желательно под спойлером) DDL ваших таблиц и несколько строк тестовых данных (не скриншотами, а текстом), а так же результат, который требуется получить конкретно на этих данных. Раз уж с самостоятельной адаптацией нескольких готовых вариантов такие проблемы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 11:46:42 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 andrejk , если хотите конкретной помощи - укажите (желательно под спойлером) DDL ваших таблиц и несколько строк тестовых данных (не скриншотами, а текстом), а так же результат, который требуется получить конкретно на этих данных. Раз уж с самостоятельной адаптацией нескольких готовых вариантов такие проблемы... Это я сделаю попозже, не могу сразу всё охватить. Сейчас пока у меня такой вопрос всплыл… Да, кстати, вот так решил примитивным синтаксисом запрос: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. [/SRC] Вопрос такой: почему по отдельности части запроса выполняются быстро, а вместе зависают минут на 8? Не могу понять, как БД на последнем этапе ищет, что её так грузит. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 16:18:49 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, потому что (и вроде бы я тут об этом уже писал) IN-подзапросы до версии 5.5 включительно очень хреново обрабатываются оптимизатором. JOIN-вариант, который вы отказываетесь разбирать, на хоть сколько-нибудь значимых объёмах работает быстрее, ну и всякие плюшки (наподобие все слова/не все слова/только M из N слов) к нему проще прикрутить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 16:58:42 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirandrejk, потому что (и вроде бы я тут об этом уже писал) IN-подзапросы до версии 5.5 включительно очень хреново обрабатываются оптимизатором. JOIN-вариант, который вы отказываетесь разбирать, на хоть сколько-нибудь значимых объёмах работает быстрее, ну и всякие плюшки (наподобие все слова/не все слова/только M из N слов) к нему проще прикрутить. Ну понятно, что хреново, но это общий ответ, а я хочу понять, где жрутся ресурсы, что там произходит. Там какие-то циклы, но я не могу понять, какие и гдк. Просто хочу понять и всё, немогу без этого дальше нормально жить. А JOIN я подучу. Сейчас пока знакомлюсь с псевдонимами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 17:03:14 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkа я хочу понять, где жрутся ресурсы, что там произходит. Там какие-то циклы, но я не могу понять, какие и гдкна примере: Код: sql 1. 2. Выделенный подзапрос при выполнении запроса будет выполнен столько раз, сколько записей в таблице t1, и пофиг, что с t1 его результат не связан вообще никак. В некоторых других СУБД оптимизаторы это видят и выполняют такие подзапросы один раз. Но не в мускле. А вы их в 3 слоя один на другой нагромождаете :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 17:07:58 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Попробую разбить на два подзапроса… У меня прогресс, я смог прочесть ваш пример) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2014, 17:33:41 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 andrejk , если хотите конкретной помощи - укажите (желательно под спойлером) DDL ваших таблиц и несколько строк тестовых данных (не скриншотами, а текстом), а так же результат, который требуется получить конкретно на этих данных. Раз уж с самостоятельной адаптацией нескольких готовых вариантов такие проблемы... Ух… Что такое спойлер? Как указать DDL? Я почитал и так понял, что это комманды, которыми создавалась БД? Текст комманд создания БД указать? Как получить тестовые данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2014, 10:04:15 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirandrejk, вводим "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, 17:14:49 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkА это результат моего труда и вашей помощи, чтобы не думали, что я троль — http://slova.andrej.by/ И это я почти с нуля за неделю сделал. А вы с нуля через какое время написали действующий, пусть и крошечный, пусть и для себя, но сервисик? (Да, я ТРОЛИЩЕ — и протролил и прорекламил) Кто-то уже балуется с инъекциями… Ребят, я ж вижу что вы там вводите))) Ну, можете потренироваться и мне рассказать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 18:19:01 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Вот такой вопрос всплыл, ребята, по ходу пьесы. Нужно выбрать из БД айди наборов, состоящих только из слов на латинице и вернуть их количество. Я попробовал такой свой первый запрос на джоинах: Код: sql 1. 2. 3. 4. 5. Пишет, что таких столбцов нет… Требуется неотложная помощь, а то не могу понять, в чём дело. Названия таблиц в комментариях прописаны: наборы, связи общие и слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2014, 22:59:54 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkПишет, что таких столбцов нет…бэктиками обрамляется каждый идентификатор в отдельности, а не всё выражение в целом т.е. вместо Код: sql 1. надо писать Код: sql 1. или вообще бэктики убрать, они тут в общем-то не нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 06:46:06 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
Спасибо, запрос получился, но надо ещё считать только уникальные значения. Не могу вставить правильно distinct, постоянно выдаёт ошибки. Может надо для distinct изменить запрос? Покажите, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 15:54:25 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejk, каунт(дистинкт ид_набора) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 05:08:50 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
tanglirandrejk, каунт(дистинкт ид_набора) Не, не врубаюсь… Код: sql 1. 2. 3. 4. 5. Чё-та тут куралес, а не запрос…) Мы же не знаем ид_набора, мы их количество посчитать должны… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 08:20:57 |
|
||
|
Как организовать бд для вот такой задачи?
|
|||
|---|---|---|---|
|
#18+
andrejkМы же не знаем ид_набора Код: sql 1. Более того, если нужны только ид наборов и количество их повторений, то и таблица ТН в общем-то не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 11:31:20 |
|
||
|
|

start [/forum/search_topic.php?author=minton&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
142ms |
get tp. blocked users: |
2ms |
| others: | 785ms |
| total: | 1054ms |

| 0 / 0 |
