powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как организовать бд для вот такой задачи?
109 сообщений из 109, показаны все 5 страниц
Как организовать бд для вот такой задачи?
    #38695692
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть имя файла, его полный путь и ключевые слова.
Имя и, соответственно, полный путь у каждого файла уникальны.
У каждого файла может быть неограниченое число ключевых слов (без повторений).

Подозреваю, что тут придётся использовать внешние ключи, но не соображу как.

Пробовал всё в одну таблицу впихнуть (поля: имя(varchar), путь(varchar), слово1(boolean), слово2(boolean)…словоN(boolean)), но как-то не симпатично иметь таблицу с парой тысяч полей под все ключевые слова, тем более, что, вроде, есть ограничение на количество полей.

Думаю вынести ключевые слова в отдельную таблицу с парой полей (например, id и slova) и как-то связать некоторые их id с соответстующими файлами в другой таблице, так, чтобы выводя название файла, с ним выводились и его ключевые слова.

Помогите, пожалуйста, организовать бд.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695703
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejk,

как вариант три таблицы:
1) таблица файлов с полями:
id_file
file_name

2)таблица слов :
id_word
word_name

3) таблица связей:
id_file
id_word
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695732
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если сократить идентификаторы и оставить только имя и слово (они по условию уникальны, т. е. грубо говоря могут сами быть идентификаторами), то разве не получится таблица связей в виде «file_name, word_name» вместо «id_file, id_word».

Если я ошибаюсь, то тогда объясните, пожалуйста, как эти связи использовать, ведь к одному файлу принадлежат сразу несколько десятков ключевых слов.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695743
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается, что для обозначения принадлежности к одному файлу сразу нескольких слов, в таблице связей придётся либо айди/имя файла повторять для разных слов либо айди/имя слова повторять для разных файлов? Это нормальная избыточность? Использование идентификаторов в этом случае только ускорят процессы, но для логики они не нужны (повторюсь, что имена файлов и слова по условию уникальны).
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695744
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkЕсли сократить идентификаторы и оставить только имя и слово (они по условию уникальны, т. е. грубо говоря могут сами быть идентификаторами), то разве не получится таблица связей в виде «file_name, word_name» вместо «id_file, id_word».

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

Все можно, но числовой ключ на мой взгляд все-таки лучше чем varchar.
Если делать "file_name, word_name" - то в других таблицах нет необходимости.

На мой взгляд таблица с именем файлов может содержать и др. инфу (размер, дату, кто предоставил...)
Со словами - одно слово может относиться к разным файлам.

Дело вкуса.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695748
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkПолучается, что для обозначения принадлежности к одному файлу сразу нескольких слов, в таблице связей придётся либо айди/имя файла повторять для разных слов либо айди/имя слова повторять для разных файлов? Это нормальная избыточность? Использование идентификаторов в этом случае только ускорят процессы, но для логики они не нужны (повторюсь, что имена файлов и слова по условию уникальны).

Ну почему же это избыточность?
Есть такое понятие как нормализация.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695768
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, в таблицу с именем файлов будут помещены ещё и пути к ним. Это добавляет жизни третьей таблице связей.

Я отолько учусь (самостоятельно. Кстати почитал только что про нормализацию, спасибо:-)), поэтому переспрошу ещё раз — вот такое наполнение таблицы связей нормальное получается?:

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 одинаковых? Их как-то можно сократить?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695787
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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%' - нет).
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695794
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly BИли использовать другой подход: "файл" - 'слово1;слово2;... словоN' - одна строка, где слова приведены через разделитель.


Т. е. в одном поле name_word будут целые строки из слов с разделителями?

Не. лучше пусть в таблице связей будут повторения.

Получается так:
мы запрашиваем слово,
бд ищет его айди,
потом в таблице связей ищет все строки со значением нашего айди в поле id_file
и массивом выводит все соответствующие значения из поля id_word?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695797
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
* мы запрашиваем ФАЙЛ
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695802
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejk* мы запрашиваем ФАЙЛ


Ну да, можно одним запросом:

Код: sql
1.
select file_name from file_table where id_file in (select id_file from links where id_word in (select id_word from word_table where word = 'СЛОВО'))
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38695820
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду ковыряться дальше пока. Попробую оргранизовать тройную табличность и проверю логику необходимого функционала с ней.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696026
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посчитал тут длинну таблицы связей в строках и мне плохо стало)))

Предположим, что будет 100,000 пользователей,
у каждого пользователя по 100,000 файлов,
у каждого файла по 50 ключевых слов —
итого: 100,000×100,000×50=500,000,000,000 (строк).

Это нормально???)))
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696038
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkПредположим, что будет 100,000 пользователей,
у каждого пользователя по 100,000 файлов,

Гы, мене нравятся цифры - тогда нужно вопрос задавать как оптимизировать хранение и поиск в большом объеме данных.
100 тыс - прогнозируемая заполненность из реальной жизни?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696052
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly BГы, мене нравятся цифры - тогда нужно вопрос задавать как оптимизировать хранение и поиск в большом объеме данных.
100 тыс - прогнозируемая заполненность из реальной жизни?

Пока теоретически. Но какая разница, а вдруг) Что потом делать?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696054
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, кстати — как оптимизировать хранение и поиск в большом объеме данных?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696099
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejk,

перед тем как кодить, сначала проводят анализ для чего это делается, какие поиски будут, по каким критериям, каков ориентировочный объем,...
Если данных много и их можно поделить на более мелкие "аля независимые части" можно сделать партицирование (скажем партиции по первой букве слова).
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696152
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly B,

Т. е. эти 500 млд строк просто разбить на таблицы — сделать из одной таблицы связей несколько? Я к чему: т. е. принципиально ничего в логике не поменяется, просто облать выборки сузится за счёт разделения?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696287
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkЕсть имя файла, его полный путь и ключевые слова.
Имя и, соответственно, полный путь у каждого файла уникальны.
У каждого файла может быть неограниченое число ключевых слов (без повторений).

Подозреваю, что тут придётся использовать внешние ключи, но не соображу как.

Пробовал всё в одну таблицу впихнуть (поля: имя(varchar), путь(varchar), слово1(boolean), слово2(boolean)…словоN(boolean)), но как-то не симпатично иметь таблицу с парой тысяч полей под все ключевые слова, тем более, что, вроде, есть ограничение на количество полей.

Думаю вынести ключевые слова в отдельную таблицу с парой полей (например, id и slova) и как-то связать некоторые их id с соответстующими файлами в другой таблице, так, чтобы выводя название файла, с ним выводились и его ключевые слова.

Помогите, пожалуйста, организовать бд.


как вариант (может и не подойти):
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
теряется структура тегов, зато сработает из коробки.
Теги просто навалить в стринговое поле через пробел
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696302
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, ребята, для меня это ещё круто, да ещё на английском. Я пока пытаюсь в общем сложить конструктор в голове и попробовать простую реализацию, используя базовые знания.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696502
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног...
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696531
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejkНо какая разница, а вдруг)А вдруг я создам армию боевых треног и начну захватывать мир? Хм, нужно срочно озаботиться надёжным мощным источником питания для треног...

Как же зае**ли умники на всех форумах.
Я не знаю, будет у меня 500 млрд записей или нет, я их и не собираюсь делать, и скорее всего не будет, но ведь теоретически такая ситуация возможна, не обязательно у меня, а вообще возможна —
ТАК ВОТ, бл?*:!, Я ПРОСТО ХОЧУ ЧЕЛОВЕЧЕСКОГО ОТВЕТА, КАК, бл?*:!, В ТАКИХ СЛУЧАЯХ ПОСТУПАЮТ.
за***ли уже узколобые, которые не могут понять простой вещи, что люди спрашивают не только из практических нужд, но иногда еще и из гепотетических. Ну вот, бл?*:!, мне интересно…
Достали.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696697
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkЯ не знаю, будет у меня 500 млрд записей или нетЗато я знаю. Не будет.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696797
Триггерман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkТАК ВОТ, бл?*:!, Я ПРОСТО ХОЧУ ЧЕЛОВЕЧЕСКОГО ОТВЕТА, КАК, бл?*:!, В ТАКИХ СЛУЧАЯХ ПОСТУПАЮТ?
Итак, уважаемый andrejk, вы хотели узнать
andrejkкак оптимизировать хранение и поиск в большом объеме данных?
Ответ такой: забудьте про оптимизацию и поиск. Если вы разработали правильную продуманную структуру БД, то вопросы оптимизации и поиска за вас будет решать уже программа (она называется СУБД).
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696808
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТриггерманЕсли вы разработали правильную продуманную структуру БД, то вопросы оптимизации и поиска за вас будет решать уже программа (она называется СУБД).

Разработка продуманной структуры - первый шаг оптимизации, да и поиски должны быть продуманы перед заполнением таблиц.
Как СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696819
Триггерман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly B,
Всё, что вы сможете сделать - это разработать грамотную структуру БД. Всё остальное - будут делать СУБД и железо, на котором она работает.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696821
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkЯ пока пытаюсь в общем сложить конструктор в голове и попробовать простую реализацию, используя базовые знания.
andrejkДа, кстати — как оптимизировать хранение и поиск в большом объеме данных?
Раздели эти две задачи. Реши первую, проверь макс. задержки, найди что не нравится.....
По оптимизации погугли общие рекомендации, поищи книжечки, статейки. Ну а в целом каждая задача имеет свои особенности.
Если строк в таблице ... ну очень много, для этого есть свои СУБД, для примера Elasticsearch. Но это уже 2 задача ;-)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38696905
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly BКак СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш?
Будет держать в кэше только активную часть данных.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697136
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятное дело, что теоретически бд может расти бесконечно, тут ничего не поделаешь. Проблема, которую я хочу решить, это избавиться от роста в геометрической прогрессии, т. к. трёхтабличная архитектура бд (как предлагалось выше и как я пробую сделать) вынуждает поле связей расти сразу на несколько десятков строк при добавлениии в бд всего одного файла с ключевыми словами.

Чтобы было понятно, попробу изложить задачу и текущий алгоритм решения.

Задача:

— вносить в бд с одной стороны ключевые слова, а с другой информацию о файле (его имя и путь к нему);
— закреплять за этим файлом (привязывать к нему) некоторые ключевые слова;
— по заданному ключевому слову искать в бд все другие ключевые слова, привязанные к файлам, к которым привязано и заданное ключевое слово;
— выводить найденные ключевые слова списком с сортировкой по частоте встречания в пределах условия поиска.

А вот как я решил запрос к бд (спасибо 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);
}

?>

Бедная получается таблица связей, расти будет как на дрожжах — это для каждого файла нужно будет прописать в ней сразу несколько строк под каждое привязанное слово.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697137
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, как код оформить?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697376
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkБлин, как код оформить?тег [ src ]
andrejkэто избавиться от роста в геометрической прогрессии , т. к. трёхтабличная архитектура бд (как предлагалось выше и как я пробую сделать) вынуждает поле связей расти сразу на несколько десятков строк при добавлениии в бд всего одного файла с ключевыми словами.Это не геометрическая прогрессия. Геометрическая - это если бы для каждого нового файла приходилось бы добавлять в N раз больше записей, чем для предыдущего. И даже не арифметическая :)
Ну а как вы хотели? Или так, или пихать все слова в одну строку. Недостатков у такого решения имхо больше:
1)не факт, что это будет занимать меньше места; если слова часто повторяются, то скорее будет даже больше
2)поиск по обычным индексам в таком варианте пролетает
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697383
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirЭто не геометрическая прогрессия. … И даже не арифметическая

Это я так страху нагоняю)) А вы бы как решили такую задачу?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697392
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk, либо этот вариант, либо все ключевые слова в одно поле рядом с файлом, и полнотекст на это поле. В рамках мускля других вариантов пожалуй что и нет.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697418
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думал ещё такой вариант — всё в одну таблицу:

| имя файла | слово1 | … | словоN | //строка полей
=============================
| имя1 | false | … | true |
-------------------------------------
| имя2 | false | … | false |
-------------------------------------
| имя3 | true | … | true |


Поиск связей между файлами и словами делается по логическим значениям true и false.

Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697419
Триггерман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkДумал ещё такой вариант — всё в одну таблицу:

| имя файла | слово1 | … | словоN | //строка полей
=============================
| имя1 | false | … | true |
-------------------------------------
| имя2 | false | … | false |
-------------------------------------
| имя3 | true | … | true |


Поиск связей между файлами и словами делается по логическим значениям true и false.

Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно?Гениально!
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697429
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТриггерманAnatoly B,
Всё, что вы сможете сделать - это разработать грамотную структуру БД. Всё остальное - будут делать СУБД и железо, на котором она работает.
Dimitry SibiryakovAnatoly BКак СУБД будет решать проблему оптимизации когда данные перестанут влезать в кэш?
Будет держать в кэше только активную часть данных.

Это понятно, что "впихнуть невпихуемое"(с) нельзя.
Вот и вопрос как СУБД будет решать проблему оптимизации запроса, который приводит к постоянному чтению диска и лопатит тонны информации. Мой ответ - никак. Только изменяя сам запрос, наложение ограничений на рез-т и поисковые критерии ... можно (попробовать) упростить/ускорить запрос, в конце концов поделить его на более мелкие.... И это не всегда очевидно на этапе разработки структуры.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697434
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkДумал ещё такой вариант — всё в одну таблицу:

| имя файла | слово1 | … | словоN | //строка полей
=============================
| имя1 | false | … | true |
-------------------------------------
| имя2 | false | … | false |
-------------------------------------
| имя3 | true | … | true |


Поиск связей между файлами и словами делается по логическим значениям true и false.

Но тогда вопрос, есть ли ограничения на максимальное количество полей в таблице, слов-то может насобираться с пару-тройку тысяч, а файлов на порядок больше, это точно?

Ну всё же, конкретно по такому подходу, люди добрые, что можете сказать?

Anatoly B , что вы про это думаете, если сравнить с трёхтабличной архитектурой, которую вы предлагали?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697437
Триггерман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkчто вы про это думаете, если сравнить с трёхтабличной архитектурой, которую вы предлагали?
Ваша архитектура - бесподобна !
Вы - творчески одаренный талантливый программист-разработчик БД. Вам бы в Microsoft работать - им такие спецы ох как нужны.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697440
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да ничего я по этому не думаю, т.к. это не вариант.
Добавления нового слова - это DDL операция, т.е. требуем блокировки таблицы + долго.
Битовые индексы по всем полям делать - жуть. Занимаемый дисковый размер - будет больше на больших данных...
Да и работать неудобно. Какое поле (словоN или словоМ) использовать чтобы найти искомое слово , скажем, "вариант". Делать массив соответствия "имя поля - слово "? Ну и далее в таком духе ...
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697450
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно, остановлюсь на таблице связей. Пока она будет расти, надеюсь, успею изучить партицирование т. д.)))
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697588
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
5.
6.
$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."')))
	");



Ребята, наткнулся ещё на одну головоломку. Вот этот запрос выдаёт все слова, которые привязаны к изображениям с исходным словом. Хочу сделать возможным поиск не по одному ключевому слову, привязанному к файлу, а сразу по нескольким (от одного до бесконечности). Т. е. результирующий список ключевых слов будет извлекаться только из тех файлов, в которых есть сразу все заданные изначально слова.

Проблема вот в чём: не могу сообразить, как цикл совместить с запросом. Или, может, в языке SQL есть уже подобная функция?

Если понятно изложил, подскажите, пожалуйста синтаксис запроса или хотябы логику.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697600
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkЕсли понятно изложилНе совсем. Нужно найти файлы, привязанные к такому же (или более обширному) пулу тегов, что и заданный файл?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697615
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую на примере.

Мы задаём, например, три ключевых слова для поиска.
Бд ищет все файлы, к которым привязаны сразу все три наши заданные слова.
Бд проверяет у всех найденных файлов связи с другими словами и выдаёт все связанные слова.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697631
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ясно

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct w.нужные_поля
from words w
join files2words f2w on f2w.idfile=f.id
join (select f2w_2.idfile
 from files2words f2w_2
 join words w1 on f on f2w_2.idword=w1.id
 where w1.name in (список_слов)
 group by 1
 having count(distinct f2w_2.idword) >= количество_слов_в_списке
) t0 on f2w.idfile=t0.idfile
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697770
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А сам запрос

Код: plsql
1.
2.
3.
4.
5.
6.
$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."')))
	");



изменить нельзя, только другой писать?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697794
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk, у вас тут куча IN-подзапросов. Ещё и вложенных. Если версия мускл 5.5 и ниже, то на объёме данных, отличном от смехотворного, запрос начнёт сурово тормозить.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697803
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может тогда можно их разбить на простые?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697807
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirясно

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select distinct w.нужные_поля
from words w
join files2words f2w on f2w.idfile=f.id
join (select f2w_2.idfile
 from files2words f2w_2
 join words w1 on f on f2w_2.idword=w1.id
 where w1.name in (список_слов)
 group by 1
 having count(distinct f2w_2.idword) >= количество_слов_в_списке
) t0 on f2w.idfile=t0.idfile



Можете дать комментарии к синтаксису, а о в вашем примере много мне незнакомого) Не совсем понятны ваши условные обозначения.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38697814
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkНе совсем понятны ваши условные обозначенияа какие там вообще "обозначения"? ну разве имена таблиц, так вроде бы русскиманглийским языком написано: files - файлы, words - слова, files2words - связи (идфайла, идслова)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38698109
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38698166
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007 http://sqlfiddle.com/#!2/b25879/1
Ого, мне с моими зачаточными знаниями синтаксиса надолго хватит разбираться)
Хух, начали…
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38698168
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что это вообще за сайт, и почему там два окна?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38698529
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

слева создание схемы дынных и её наполнение
справа - собственно запрос(ы)

...там же на кнопках написано, неужели непонятно?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38699922
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил пока вот так (на что хватило знаний), не смейтесь)
Но появилась проблемка…

Вот такие ошибки выдаёт:

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.
<?php
if ($_POST["vvod_slov"])
{
	$podkluchenie = mysql_connect("77777","777777","777777")  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());

	$vvod_slov = $_POST["vvod_slov"]; //помещаем в переменную опорные слова строкой
	$oporn_slova = explode("\n", $vvod_slov);//разбиваем строку опорных слов на части и заносим их в массив(есть лишние пробелы)

	for ($i = 0; $i < count($oporn_slova); $i++)//перебираем массив из строки в новый массив (без лишних пробелов)
		{
		$oporn_slova_bez_probelov[$i] = trim($oporn_slova[$i]);
		}
	
	$osnova_stroki_zaprosa = implode("', '", $oporn_slova_bez_probelov);//делаем из массива опорных слов основу строки для sql запроса
	$stroka_zaprosa = "'" . $osnova_stroki_zaprosa . "'";//окончательно формируем строку для sql запроса
	
	$rezultat_podbora = mysql_query//подставляем строку для sql запроса в полный запрос
	("
	 SELECT `slova` FROM `tablizca_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 `tablizca_slov` WHERE `slova` IN (" . $stroka_zaprosa . "))))
	");

if ($rezultat_podbora)
{
	$n = 0;//номера ячеек $massiv_rezultata
	while ($data = mysql_fetch_array($rezultat_podbora))//выводим результат подбора списком с флажками
		{
		$massiv_rezultata[$n] = $data['slova'];//массив для вывода результата подбора строкой
		$n++;
		}
/НИЖЕ СТРОКА 51 #########################################################################
		$massiv_rezultata = array_merge($oporn_slova_bez_probelov, $massiv_rezultata);
	}
	else
	{
		$massiv_rezultata = $oporn_slova_bez_probelov;
		}

	for ($i = 0; $i < count($massiv_rezultata); $i++)
	{
		$a ++; //счётчик для имён флажков в результате подбора
		echo "<input type=\"checkbox\" name=\"checkbox_" . $a . "\" checked=\"checked\"> " . $massiv_rezultata[$i] . "<br>\n";
		}

//НИЖЕ СТРОКА 64 #########################################################################
	$rezultat = implode("; ", $massiv_rezultata);//создание строки из массива результата подбора 
	echo $rezultat;
		
	
	mysql_close($podkluchenie);
	echo "<hr class=\"otbivka_24\">";
}
?>



Думал с утра соображу — не получается.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38699933
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточнение: так происходит, если пользователь вводит только слова, которых ещё нет в БД. Если среди введённых слов есть хоть одно и в БД, то отлично выполняется.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38699995
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkтак происходит, если пользователь вводит только слова, которых ещё нет в БД. Если среди введённых слов есть хоть одно и в БД, то отлично выполняетсяЕсли нет ни одного слова, то результатом запроса будет таблица с нулём записей. В этом случае этот цикл
Код: php
1.
while ($data = mysql_fetch_array($rezultat_podbora))

не выполняется ни разу, а массив "$massiv_rezultata" должен создаваться как раз там. Ну и дальше пошло-поехало.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700044
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
" tanglir]andrejkтак происходит, если пользователь вводит только слова, которых ещё нет в БД. Если среди введённых слов есть хоть одно и в БД, то отлично выполняетсяЕсли нет ни одного слова, то результатом запроса будет таблица с нулём записей. В этом случае этот цикл
Код: php
1.
while ($data = mysql_fetch_array($rezultat_podbora))

не выполняется ни разу, а массив "$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.
$rezultat_podbora = mysql_query//подставляем строку для sql запроса в полный запрос
	("
	 SELECT `slova` FROM `tablizca_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 `tablizca_slov` WHERE `slova` IN (" . $stroka_zaprosa . "))))
	");
	
$n = 0;//номера ячеек $massiv_rezultata
	while ($data = mysql_fetch_array($rezultat_podbora))//если в $rezultat_podbora нет ни одной записи, то цикл не выполняется
		{
		$massiv_rezultata[$n] = $data['slova'];//массив для вывода результата подбора строкой
		$n++;
		}
		
if ($massiv_rezultata)
{
		$massiv_rezultata = array_merge($oporn_slova_bez_probelov, $massiv_rezultata);
		//$massiv_rezultata = array_unique($massiv_rezultata);
	}
	else
	{
		$massiv_rezultata = $oporn_slova_bez_probelov;
		}

	for ($i = 0; $i < count($massiv_rezultata); $i++)
	{
		$a ++; //счётчик для имён флажков в результате подбора
		echo "<input type=\"checkbox\" name=\"checkbox_" . $a . "\"> " . $massiv_rezultata[$i] . "<br>\n";//выводим результат подбора списком с флажками
		}

	$rezultat = implode("; ", $massiv_rezultata);//создание строки из массива результата подбора
	echo $rezultat;
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700463
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007 http://sqlfiddle.com/#!2/b25879/1

Пробую у себя на сервере,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
[SRC PHP]create table tst_filekeys (
  fid int, 
  wid int, 
  primary key PK_tst_filekeys_FW(fid,wid),
  key IX_tst_filekeys_WF(wid,fid),
  constraint FK_tst_filekeys_F foreign key(fid) references tst_files(id),
  constraint FK_tst_filekeys_W foreign key(wid) references tst_keywords(id)
  );

[/SRC]

выдаёт ошибки:

#1005 - Can't create table 'webart_servis_kluchevyx_slov.tst_filekeys' (errno: 150

Percona-XtraDB, Supports transactions, row-level locking, and foreign keys
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700531
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, думал что запрос делает что надо, а он, гад, выбирает всё подряд)
Можно ли вот это

Код: sql
1.
2.
3.
4.
5.
6.
7.
$rezultat_podbora = mysql_query//подставляем строку для sql запроса в полный запрос
	("
	 SELECT `slova` FROM `tablizca_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 `tablizca_slov` WHERE `slova` IN (" . $stroka_zaprosa . "))))
	");



изменить так, чтобы
Код: sql
1.
SELECT `id_izobrazheniya` FROM `tablizca_svyazej` 

выбирал не все изображения, которым удовлетворяет хоть одно условие из
Код: sql
1.
2.
WHERE `id_slova` in 
	(SELECT `id` FROM `tablizca_slov` WHERE `slova` IN (" . $stroka_zaprosa . ")))

,
а те, которым удовлетворяют сразу все условия из
Код: sql
1.
2.
WHERE `id_slova` in 
	(SELECT `id` FROM `tablizca_slov` WHERE `slova` IN (" . $stroka_zaprosa . "))

?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700538
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkа те, которым удовлетворяют сразу все условиясм.мой вариант запроса (а может, и тот, что с склфидл, не помню) - там надо неравенство на равенство поменять
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700588
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejkа те, которым удовлетворяют сразу все условиясм.мой вариант запроса (а может, и тот, что с склфидл, не помню) - там надо неравенство на равенство поменять

Я в нём мало что понимаю.

Если можешь, подставь туда мои поли и таблицы, может чё пойму. прокомментируй логику , пожалуйста.

tablizca_izobrazhenij (id, izobrazheniya)
tablizca_slov (id, slova)
tablizca_svyazej (id_izobrazheniya, id_slova)

А в моём простом варианте никак уже не вырулить?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700683
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну хоть скажите, какие темы изучить в MySQL? Я не знаю возможностей его логики. Если просто синтаксис, то я могу почитать, но тут упёрся, что даже не знаю, что читать. Всё читать, чтоб понять, что мне поможет — это затянется… Хочется сделать, чтоб хоть как-то фурычило, хочу посмотреть вообще, что это получится, а потом править, править, улучшать и править. Мне тут ребята предлагали варианты, но я не понимаю некоторые части кода — это синтаксис там или их условные обозначения. Прошу расписать логику, что делает та конструкция, которую вы мне предлагали.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700863
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже и так извратился — не помогает почему-то… ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ? ПОЧЕМУ?

Код: 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.
//#### ФОРМИРУЕМ ЗАПРОС второго варианта ################
	//#######################################################
	$osnova_stroki_zaprosa = implode("', '", $oporn_slova_bez_probelov);//делаем из массива опорных слов основу строки для sql запроса
	$stroka_zaprosa = "'" . $osnova_stroki_zaprosa . "'";//окончательно формируем строку для sql запроса
	
	$massiv_id_slov_iz_bd = mysql_query
	("
	SELECT `id` FROM `tablizca_slov` WHERE `slova` IN (" . $stroka_zaprosa . ")
	");
	
	$m = 0;
	while ($data = mysql_fetch_array($massiv_id_slov_iz_bd))
		{
		$massiv_id_slov[$m] = $data['id'];
		$m++;
		}
	
	$stroka_zaprosa_2 = implode(" AND `id_slov` = ", $massiv_id_slov);
	
	//print_r ($stroka_zaprosa_2);
	
	$rezultat_podbora = mysql_query
	("
	 SELECT `slova` FROM `tablizca_slov` WHERE `id` IN
	(SELECT `id_slov` FROM `tablizca_svyazej` WHERE `id_izobrazhenij` IN 
	(SELECT `id_izobrazhenij` FROM `tablizca_svyazej` WHERE `id_slov` = " . $stroka_zaprosa_2 . "))
	");
	
	print_r($rezultat_podbora); ТУТ ВЫВОДИТ ЭТО — Resource id #4. Что это значит?
	//#######################################################
	//#######################################################
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700864
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
$m = 0; и $m++; лишние
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38700867
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejk$m = 0; и $m++; лишние

Ошибся, не лишние… Уже с ума схожу)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38701627
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkЯ в нём мало что понимаю.

Если можешь, подставь туда мои поли и таблицы, может чё пойму. прокомментируй логику , пожалуйста.

16310800
16311976

А в примере Сударя007 и комментарии есть.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38701658
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я благодарен за такие подробные примеры с комментариями, но, видно, мне нужно подучиться, чтобы их понять.
Я пока не могу понять, что такое:
w.нужные_поля
words w
f2w.idfile=f.id
t0
и т. д…
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38701675
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkЯ пока не могу понять, что такое:
>w.нужные_поля
Это и есть нужные поля. Например, w.id
>words w
Правильней было бы написать words AS w - это задание псевдонима таблицы в запросе. Чтобы каждый раз полное имя не набирать. В моём примере в общем-то всё равно, а вот с вашими названиями таблиц сэкономит кучу места и добавит читабельности (имхо).
>f2w.idfile=f.id
Эээ... это условие связи. "Ид файла в таблице связей"="ид файла в таблице файлов"
>t0
Опять же псевдоним, но не для имеющейся таблицы, а для результата подзапроса.
>и т. д…
А далее вам надо почитать что-нибудь про скл.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38701725
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk , если хотите конкретной помощи - укажите (желательно под спойлером) DDL ваших таблиц и несколько строк тестовых данных (не скриншотами, а текстом), а так же результат, который требуется получить конкретно на этих данных.

Раз уж с самостоятельной адаптацией нескольких готовых вариантов такие проблемы...
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38702104
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 sql]for ($i = 0; $i < $kolichestvo_opornyx_slov; $i++)
	{
		//выбираем id наборов, с которыми связаны заданные пользователем слова
		$massiv_osnovy_zaprosa[$i] = "
		(SELECT id_naborov FROM tablizca_svyazej WHERE id_slov = (SELECT id_sl FROM tablizca_slov WHERE slova = '" . $oporn_slova_bez_probelov[$i] . "')
		";//но здесь не хватает закрывающих скобок для SQL запроса
		}
		
$osnova_zaprosa = implode(" AND id_naborov IN ", $massiv_osnovy_zaprosa);

$zakryvayushhchie_skobki = ")";

for ($i = 0; $i < $kolichestvo_opornyx_slov; $i++)//нужное число закрывающих скобок
{
	$zakryvayushhchie_skobki .= ")";
	}
	
$SQL_zapros = "
	SELECT slova FROM tablizca_slov WHERE id_sl IN
	(SELECT id_slov FROM tablizca_svyazej WHERE id_naborov IN
	" . $osnova_zaprosa . $zakryvayushhchie_skobki . "
	";

[/SRC]

Вопрос такой: почему по отдельности части запроса выполняются быстро, а вместе зависают минут на 8? Не могу понять, как БД на последнем этапе ищет, что её так грузит.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#часть 1 (при подстановке сюда результата части 2 вручную)
SELECT slova
FROM tablizca_slov
WHERE id_sl
IN 

#часть 2(
SELECT id_slov
FROM tablizca_svyazej
WHERE id_naborov
IN (
SELECT id_naborov
FROM tablizca_svyazej
WHERE id_slov = ( 
SELECT id_sl
FROM tablizca_slov
WHERE slova = 'кирпич' )))
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38702154
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk, потому что (и вроде бы я тут об этом уже писал) IN-подзапросы до версии 5.5 включительно очень хреново обрабатываются оптимизатором. JOIN-вариант, который вы отказываетесь разбирать, на хоть сколько-нибудь значимых объёмах работает быстрее, ну и всякие плюшки (наподобие все слова/не все слова/только M из N слов) к нему проще прикрутить.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38702162
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejk, потому что (и вроде бы я тут об этом уже писал) IN-подзапросы до версии 5.5 включительно очень хреново обрабатываются оптимизатором. JOIN-вариант, который вы отказываетесь разбирать, на хоть сколько-нибудь значимых объёмах работает быстрее, ну и всякие плюшки (наподобие все слова/не все слова/только M из N слов) к нему проще прикрутить.

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

А JOIN я подучу. Сейчас пока знакомлюсь с псевдонимами.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38702172
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkа я хочу понять, где жрутся ресурсы, что там произходит. Там какие-то циклы, но я не могу понять, какие и гдкна примере:
Код: sql
1.
2.
select t1.a
from t1 where t1.id=(select id from t2 where t2.trololo=100500)

Выделенный подзапрос при выполнении запроса будет выполнен столько раз, сколько записей в таблице t1, и пофиг, что с t1 его результат не связан вообще никак. В некоторых других СУБД оптимизаторы это видят и выполняют такие подзапросы один раз. Но не в мускле.
А вы их в 3 слоя один на другой нагромождаете :)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38702199
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую разбить на два подзапроса… У меня прогресс, я смог прочесть ваш пример)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38703569
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007 andrejk , если хотите конкретной помощи - укажите (желательно под спойлером) DDL ваших таблиц и несколько строк тестовых данных (не скриншотами, а текстом), а так же результат, который требуется получить конкретно на этих данных.

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

Ух… Что такое спойлер? Как указать DDL? Я почитал и так понял, что это комманды, которыми создавалась БД? Текст комманд создания БД указать? Как получить тестовые данные?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38703597
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk ,

Правила форума на SQL.RU (v1.0) , смотрите пример в рекомендациях
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704626
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007 andrejk ,

Правила форума на SQL.RU (v1.0) , смотрите пример в рекомендациях

Пронумеруйте правила, чтобы точнее указывать)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704657
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё раз всем спасибо, кто потрудился написать мне для примера код. Попыхтел и вот что получилось (за основу взял код 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.
select ts.s, count(*)
from (
  select t_s.id_n
  from  ts
  join t_s on t_s.id_s = ts.ids
  where ts.s in ('" . $oporn_slova . "')
  group by t_s.id_n having count(/*distinct*/ t_s.id_s) = " . $kolichestvo_opornyx_slov . "
  ) g
join t_s on t_s.id_n = g.id_n
join ts on ts.ids = t_s.id_s
group by t_s.id_s
order by count(*) desc, ts.s
;



Но у меня всё равно остались вопросы, потому, что переделать код под себя я пока смог без полного просветления, только с какой-то внутренней чуйкой. Ещё буду со всеми предложенными вариантами через ДЖОИНЫ разбираться.

Вот вопросы:

1 — не могу понять, в каком порядке БД выполняет код. Подставьте, пжлста, цыферки, что за чем выполняется.
2 — я так понял, сдесь вложенность ДЖОИНОВ?
3 — что изменит раскомментированный /*distinct*/?
4 — с псевдонимом g не понятно. Это псевдоним какой-то новой таблицы? Откуда потом появылось g.id_n?
5 — не понятно, count(*) ведь считает количество строк, как он посчитал количество слов по отдельности, чтоб потом по нему сортировать?

Вот как-то так. Спасибо.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704671
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

не могли бы вы повторить свой код, но уже с моими новыми короткими названиями?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704694
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select ts.s, count(*)
from (
  select t_s.id_n
  from  ts -- 1.1, откуда берём данные
  join t_s on t_s.id_s = ts.ids -- 1.1, откуда берём данные
  where ts.s in ('" . $oporn_slova . "') -- 1.2, фильтр по словам
  group by t_s.id_n -- 1.3, группировка
  having count(/*distinct*/ t_s.id_s) = " . $kolichestvo_opornyx_slov . " 
-- 1.4 оставляем после группировки только такие id_n,
-- у которых количество id_s равно количеству нужных слов
  ) g -- 1
join t_s on t_s.id_n = g.id_n -- 1
join ts on ts.ids = t_s.id_s -- 1
group by t_s.id_s -- 2
order by count(*) desc, ts.s -- 3
;

как-то так

2. Не джойнов, а запросов. "Вложенных джойнов", насколько я понимаю, не может быть в принципе.
3. Это на случай, если у вас могут быть дублирующиеся записи в таблице связей. В случае, когда у вас есть только связи, без какой-либо доп. информации о них (т.е. в таблице связей есть только 2 поля: ид1 и ид2), повторов быть и так не должно, ну и дистинкт тогда не нужен.
4. g - псевдоним для результата подзапроса. Того, что выполняется в скобках.
5. На верхнем уровне выводятся 2 поля: первое - само слово, второе - количество повторов этого слова. Сортировка выполняется после группировки; количество повторов - обычное поле результата, по нему спокойно можно сортировать.

Почитайте хотя бы Грабера, что ли. Для понимания этого запроса будет имхо вполне достаточно.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704698
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнаружил косяк. Не то чтобы он на что-то повлиял, id_s всё-так первичный ключ, но лучше всё-таки сделать так
Код: sql
1.
2.
3.
4.
select ts.s, count(*)
<...>
group by ts.s
<...>

Это мускль добрый, а другие сервера такой запрос выполнять откажутся.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704730
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirОбнаружил косяк. Не то чтобы он на что-то повлиял, id_s всё-так первичный ключ, но лучше всё-таки сделать так
Код: sql
1.
2.
3.
4.
select ts.s, count(*)
<...>
group by ts.s
<...>

Это мускль добрый, а другие сервера такой запрос выполнять откажутся.

1 — Там два места группировки, в каком поменять? И почему откажутся, какая тут тонкость?

2 — Откуда потом появилось g.id_n? Что из себя представляет g? Таблицу с полями? Я та понимаю, что виртуальную, временную?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704735
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirОбнаружил косяк. Не то чтобы он на что-то повлиял, id_s всё-так первичный ключ, но лучше всё-таки сделать так
Код: sql
1.
2.
3.
4.
select ts.s, count(*)
<...>
group by ts.s
<...>

Это мускль добрый, а другие сервера такой запрос выполнять откажутся.

Косяк этот в примере от 007 или в вашем?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704748
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

в вашем
менять последний групбай
почему - см. здесь 13173672
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704781
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirОбнаружил косяк. Не то чтобы он на что-то повлиял, id_s всё-так первичный ключ, но лучше всё-таки сделать так
Код: sql
1.
2.
3.
4.
select ts.s, count(*)
<...>
group by ts.s
<...>

Это мускль добрый, а другие сервера такой запрос выполнять откажутся.Не то чтобы косяк - форум по MySQL, поэтому другие сервера как бы до лампочки. То же замечание, буде возникнет, относится к SUM(a=1) вместо SUM(case when a=1 then 1 else 0 end)

Ваша же замена может быть не идентичной, правильнее так:
select ts.s ... group by ts.id,ts.s
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704800
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Код: sql
1.
2.
3.
4.
5.
6.
7.
потому что напишите-ка результат этого запроса
select a,b,sum(c) from table group by a
 на таких данных
a	b	c
1	1	1
1	2	2
2	2	3



Здесь есть несоответствие в количестве выводимых строк в столбце «с» (одна строка, в которой сумма) и строк в других столбцах (по три в каждом)? Я правильно понял этот пример?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704810
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имел ввиду до группировки.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704822
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007group by ts.id,ts.s

Подставил это и выдало ошибку. Может я чё не так… Если просто подставить group by ts.s, то не выдаёт ошибок.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704882
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkCygapb-007group by ts.id,ts.s

Подставил это и выдало ошибку. Может я чё не так… Если просто подставить group by ts.s, то не выдаёт ошибок.
конкретно в вашем примере -
Код: sql
1.
group by t_s.id_s, ts.s
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38704908
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но можете хотябы в двух словал пояснить, всё же, в чём особенность?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705026
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkСпасибо, но можете хотябы в двух словал пояснить, всё же, в чём особенность?
если я правильно понял вопрос, то я имел в виду, что для select id,s,sum(val) from idsval111212224 group by id даст совсем не то же, что и group by s
правда, group by id,s тоже даст другой результат, так что может я и не по делу выступил...


Особенность в том, что MySQL позволяет, в отличие от других СУБД, не перечислять все неагрегатные поля в списке группировки.
При этом предполагается, что все такие поля содержат одно и то же значение для всех строк группы, поэтому неважно, из какой конкретно строки их можно включить в результат.

Большой минус такого подхода - излишняя доверчивость сервера к разумению автора запроса (проверка на наличие различных значений не делается никогда), из-за чего при наличии различных значений в не агрегатных и не группируемых полях может привести к различным (не детерминированным) результатам запроса.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705112
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не нашёл, что такое агрегатные поля, только про функции пищут. Что это за поля?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705118
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

«Почитайте хотя бы Грабера, что ли. Для понимания этого запроса будет имхо вполне достаточно.»

Не укажете название книжечки, если она на русском?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705144
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи, похоже, он нас троллит.
https://www.google.ru/search?q=грабер sql
Первая(!) же ссылка - http://www.sql.ru/docs/sql/u_sql/
На русском! И даже качать не надо, *****, не то что покупать - открывай и читай!
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705145
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
select id, s, sum(val)
from(
  select 2 id, 1 s, 1 val union all
  select 2, 2, 2 union all
  select 2, 3, 4
  ) s
group by id

непредсказуемо вернет либо (2,1,7), либо (2,2,7), либо (2,3,7)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705163
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirТоварищи, похоже, он нас троллит.
https://www.google.ru/search?q=грабер sql
Первая(!) же ссылка - http://www.sql.ru/docs/sql/u_sql/
На русском! И даже качать не надо, *****, не то что покупать - открывай и читай!

нет, похоже, что я уже закипаю — http://yandex.by/yandsearch?text=граббер mysql&lr=155 )))
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705177
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

потому что книга Грабера - она, *****, не про МАЙэскуэль, она про ВООБЩЕ эскуэль. Про стандарт. И про суть.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705180
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А это результат моего труда и вашей помощи, чтобы не думали, что я троль — http://slova.andrej.by/
И это я почти с нуля за неделю сделал. А вы с нуля через какое время написали действующий, пусть и крошечный, пусть и для себя, но сервисик?

(Да, я ТРОЛИЩЕ — и протролил и прорекламил)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705196
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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".
Ну и смысла я не понял - "собрать", потом "подобрать"... что оно делает?
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705211
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здесь ещё нет проверки и очистки введённых данных.
Что делает? Решает мои узкоспециализированные задачи) Чтобы не придумывать каждый раз слова, которые уже придумал, а видеть их перед собой и просто ставить птички.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705261
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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".
Ну и смысла я не понял - "собрать", потом "подобрать"... что оно делает?

Проблемма была в '. Больше проблемы нет.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38705331
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkА это результат моего труда и вашей помощи, чтобы не думали, что я троль — http://slova.andrej.by/
И это я почти с нуля за неделю сделал. А вы с нуля через какое время написали действующий, пусть и крошечный, пусть и для себя, но сервисик?

(Да, я ТРОЛИЩЕ — и протролил и прорекламил)

Кто-то уже балуется с инъекциями… Ребят, я ж вижу что вы там вводите))) Ну, можете потренироваться и мне рассказать)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38734430
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой вопрос всплыл, ребята, по ходу пьесы.
Нужно выбрать из БД айди наборов, состоящих только из слов на латинице и вернуть их количество.
Я попробовал такой свой первый запрос на джоинах:
Код: sql
1.
2.
3.
4.
5.
SELECT COUNT(*)
FROM `tn`
join `t_s` on `tn.idn` = `t_s.id_n`
join `ts` on `t_s.id_s` = `ts.ids`
where `ts.s` regexp '[a-z]'


Пишет, что таких столбцов нет…

Требуется неотложная помощь, а то не могу понять, в чём дело.

Названия таблиц в комментариях прописаны: наборы, связи общие и слова.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38734510
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkПишет, что таких столбцов нет…бэктиками обрамляется каждый идентификатор в отдельности, а не всё выражение в целом
т.е. вместо
Код: sql
1.
`ts.s`

надо писать
Код: sql
1.
`ts`.`s`

или вообще бэктики убрать, они тут в общем-то не нужны
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38735124
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, запрос получился, но надо ещё считать только уникальные значения. Не могу вставить правильно distinct, постоянно выдаёт ошибки. Может надо для distinct изменить запрос? Покажите, пожалуйста.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38735614
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

каунт(дистинкт ид_набора)
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38735669
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirandrejk,

каунт(дистинкт ид_набора)
Не, не врубаюсь…
Код: sql
1.
2.
3.
4.
5.
SELECT COUNT(distinct*)
FROM `tn`
join `t_s` on `tn`.`idn` = `t_s`.`id_n`
join `ts` on `t_s`.`id_s` = `ts`.`ids`
where `ts`.`s` regexp '[a-z]'


Чё-та тут куралес, а не запрос…)
Мы же не знаем ид_набора, мы их количество посчитать должны…
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38735921
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkМы же не знаем ид_набора
Код: sql
1.
SELECT COUNT(distinct tn.idn)

Более того, если нужны только ид наборов и количество их повторений, то и таблица ТН в общем-то не нужна.
...
Рейтинг: 0 / 0
Как организовать бд для вот такой задачи?
    #38736914
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Код: sql
1.
2.
3.
4.
SELECT COUNT(distinct `t_s`.`id_n`)
FROM `t_s`
join `ts` on `t_s`.`id_s` = `ts`.`ids`
where `ts`.`s` regexp '[a-z]'



Походу так получается?
...
Рейтинг: 0 / 0
109 сообщений из 109, показаны все 5 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как организовать бд для вот такой задачи?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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