Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MySQL операции над множествами

39K
25 января 2012 года
Игорь007
6 / / 17.07.2008
Задача следующего плана. В базе данных необходимо хранить большое количество наборов значений (каждый набор состоит из 6 числовых значений):
Например:
36 79 98 35 46 87
56 89 34 67 68 32
….
и т.д.
Нужно определить какие наборы входят в заданное подмножество (заданное подмножество вводиться в клиентской программе).
Лучше все делать через запросы в базе данных или лучше получить из базы все наборы и уже в клиентской программе производить операции над множествами? Что будет продуктивнее? Если все делать в БД, то как запрос составить?
277
25 января 2012 года
arrjj
1.7K / / 26.01.2011
Ну если через бд то есть оператор between.

Можно создать индексы для более шустрой выборки.

При оптимизации можно поизвращаться добавив хеш-столбик например.
39K
25 января 2012 года
Игорь007
6 / / 17.07.2008
Не совсем понимаю, как это будет выглядеть...
277
25 января 2012 года
arrjj
1.7K / / 26.01.2011
 
Код:
SELECT * FROM TABLE WHERE (col1 BETWEEN 10 AND 20) AND (col2 BETWEEN 10 AND 20) AND (col3 BETWEEN 10 AND 20)...


Но както криво выглядит
385
26 января 2012 года
SomewherSomehow
477 / / 25.07.2004
Как именно задается подмножество, и как должно искаться пересечение?
412
26 января 2012 года
grgdvo
323 / / 04.07.2007
Поддерживаю... я вот тоже задался вопросом: а как у вас выстроены отношения между самим числом и набором? как задается входное подмножество? отсюда уже плясать.

например,
есть таблица наборов и чисел (tuplenum): id - ид. набора, num - число
есть таблица входного множества (inset): innum - число

строим view в виде пересечения этих таблиц (tupleset)
 
Код:
select id, num from tuplenum, inset where num = innum


строим view всех наборов с указанием кол-ва элементов в этом наборe (tuple1):
 
Код:
select id, count(num) as numcount1 from tuplenum group by id


строим view всех наборов с указанием кол-ва элементов в пересечении (tuple2):
 
Код:
select id, count(num) as numcount2 from tupleset group by id


Наконец можно выбрать:

 
Код:
select id from tuple1, tuple2 where tuple1.id = tuple2.id and tuple1.numcount1 = tuple2.numcount2
39K
29 января 2012 года
Игорь007
6 / / 17.07.2008
Всем спасибо за советы. Вопрос решился.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог