Алгоритм поиска
От: AlLucky Беларусь Qulix Systems
Дата: 12.10.05 06:00
Оценка:
Гуру алгоритмизации и оптимизации, плиз, подскажите алгоритм поиска для следующей ситуации:
Есть таблица
PK_field,
FK_field,
search_field,
data

Заданы условия (несколько) на пары search_field — data (т.е. они одновременно должны быть равны чему-то, например search_field='Title', data='Programming'; search_field='Author', data='Sliborsky')

Задача: найти такие FK_field, для которых будут удовлетворятся все условія поіска

Спасибо
Sincerely Mine AlLucky Sly
<<Слушаю болтовню коллег...>>

22.10.05 01:51: Перенесено из 'Алгоритмы'
Aleksandr Sly
Re: Алгоритм поиска
От: vnp  
Дата: 12.10.05 07:04
Оценка:
Здравствуйте, AlLucky, Вы писали:

AL>Гуру алгоритмизации и оптимизации, плиз, подскажите алгоритм поиска для следующей ситуации:

AL>Есть таблица
AL>PK_field,
AL>FK_field,
AL>search_field,
AL>data

AL>Заданы условия (несколько) на пары search_field — data (т.е. они одновременно должны быть равны чему-то, например search_field='Title', data='Programming'; search_field='Author', data='Sliborsky')


AL>Задача: найти такие FK_field, для которых будут удовлетворятся все условія поіска


1. SQL, я так понимаю, не подходит.
2. for() { if (strcmp() == 0) и т.д. видимо, тоже.
3. Чего за таблица, как определена, какие методы имеются?

AL>Спасибо
Re[2]: Алгоритм поиска
От: AlLucky Беларусь Qulix Systems
Дата: 12.10.05 08:18
Оценка:
Здравствуйте, vnp, Вы писали:

vnp>1. SQL, я так понимаю, не подходит.

Почему? Хотелось бы как раз какой-нить его хитрой комбинацией забомбить, ежели это возможно...
vnp>2. for() { if (strcmp() == 0) и т.д. видимо, тоже.
Ну, это да
vnp>3. Чего за таблица, как определена, какие методы имеются?
Таблица в БД, определена как показано выше (ну, разве что потом может сделаем Partitioning но это не повлияет на структуру). А какие методы могут быть?

AL>>Спасибо
Sincerely Mine AlLucky Sly
<<Слушаю болтовню коллег...>>
Aleksandr Sly
Re[3]: Алгоритм поиска
От: vnp  
Дата: 13.10.05 00:35
Оценка: +1
Здравствуйте, AlLucky, Вы писали:

AL>Здравствуйте, vnp, Вы писали:


vnp>>1. SQL, я так понимаю, не подходит.

AL>Почему? Хотелось бы как раз какой-нить его хитрой комбинацией забомбить, ежели это возможно...
vnp>>2. for() { if (strcmp() == 0) и т.д. видимо, тоже.
AL>Ну, это да
vnp>>3. Чего за таблица, как определена, какие методы имеются?
AL>Таблица в БД, определена как показано выше (ну, разве что потом может сделаем Partitioning но это не повлияет на структуру). А какие методы могут быть?

Дошло. Я из исходного поста не понял, что таблица в БД. Так простой

select FK_field from table
where
    (search_field = ... and data = ...) or
    (search_field = ... and data = ...) or
    ...

должен все сделать сам. Или я опять не доезжаю?

AL>>>Спасибо
Re[4]: Алгоритм поиска
От: AlLucky Беларусь Qulix Systems
Дата: 13.10.05 05:59
Оценка:
Здравствуйте, vnp, Вы писали:

vnp>
vnp>select FK_field from table
vnp>where
vnp>    (search_field = ... and data = ...) or
vnp>    (search_field = ... and data = ...) or
vnp>    ...

vnp>

vnp>должен все сделать сам. Или я опять не доезжаю?
Так просто выберутся все значения, удовлетворяющие хоть одному критерию. После этого придется ручками и не очень, наверное, эффективано перебирать результаты в поисках такого, который бы удовлетворял ВСЕМ условиям (мне именно надо выбрать такое значение, которое удовлетворяет ВСЕМ условиям, а не каким-либо)

AL>>>>Спасибо
Sincerely Mine AlLucky Sly
<<Слушаю болтовню коллег...>>
Aleksandr Sly
Re[5]: Алгоритм поиска
От: wildwind Россия  
Дата: 13.10.05 10:30
Оценка:
Здравствуйте, AlLucky, Вы писали:

vnp>>
vnp>>select FK_field from table
vnp>>where
vnp>>    (search_field = ... and data = ...) or
vnp>>    (search_field = ... and data = ...) or
vnp>>    ...

vnp>>


AL>Так просто выберутся все значения, удовлетворяющие хоть одному критерию.


1. Для того, чтобы выбрать значения, удовлетворяющие всем критериям, нужно добавить
 group by FK_field
having count(distinct search_field) = :n
где n — количество условий (критериев).

2. Лучше будет не генерить SQL для каждого запроса, а вставлять условия во временную табличку (пары search_field — data) и соединять ее с основной.

3. Если уж ставится вопрос об эффективном поиске, сразу возникает встречный вопрос: насколько обосновано хранение атрибутов в строках а не в столбцах?

P.S. Голосуй за перенос в Базы данных — там идей будет больше.
Re: Алгоритм поиска
От: Balsamo Россия  
Дата: 14.10.05 10:43
Оценка:
Здравствуйте, AlLucky, Вы писали:

AL>Гуру алгоритмизации и оптимизации, плиз, подскажите алгоритм поиска для следующей ситуации:

AL>Есть таблица
AL>PK_field,
AL>FK_field,
AL>search_field,
AL>data

AL>Заданы условия (несколько) на пары search_field — data (т.е. они одновременно должны быть равны чему-то, например search_field='Title', data='Programming'; search_field='Author', data='Sliborsky')


AL>Задача: найти такие FK_field, для которых будут удовлетворятся все условія поіска


AL>Спасибо


Если я правильно понял, то этот SQL запрос пишется примерно так:

SELECT "PK_field" FROM <имя_таблицы> where (search_field = <условие_отбора_1>) AND (data = <условие_отбора_2>);


При этом расстановка кавычек (двойные или одинарные), а ткже запись название полей для SQL-запроса зависит от конкретной реализации SQL в той СУБД, для которой запрос. Подробнее смотри сиснтаксис SQL по стандарту.
Re[5]: Алгоритм поиска
От: pf79 Украина  
Дата: 23.10.05 14:17
Оценка:
Здравствуйте, AlLucky, Вы писали:

AL>Здравствуйте, vnp, Вы писали:


vnp>>
vnp>>select FK_field from table
vnp>>where
vnp>>    (search_field = ... and data = ...) or
vnp>>    (search_field = ... and data = ...) or
vnp>>    ...

vnp>>

vnp>>должен все сделать сам. Или я опять не доезжаю?
AL>Так просто выберутся все значения, удовлетворяющие хоть одному критерию. После этого придется ручками и не очень, наверное, эффективано перебирать результаты в поисках такого, который бы удовлетворял ВСЕМ условиям (мне именно надо выбрать такое значение, которое удовлетворяет ВСЕМ условиям, а не каким-либо)

AL>>>>>Спасибо

А заменить OR на AND в предложенным запросе ??
Кстати говоря еще вроде как in имеется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.