Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Задача застала в-рас-плох. Есть таблица [Name varchar(500), bKey decimal(13)] около 100 тыс. зап. Надо выделить набор состоящий из 20 записей перед и 20 после искомой (ищем по bKey), причем в алфавитном порядке всей таблицы. Самое смешное, что в Access такой проблемы в принципе не было - там эта таблица просто открывалась (отсортированная по алфавиту) в форме и находилась нужная запись (вот она, блин, клиент-серверная технология). З.Ы. На ум приходят всякие дополнительный столбцы и пр., но хочется красивее и так чтоб ни одно животное при этом не пострадало... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 14:28 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Задачка очень даже странная. Ну, ладно, молчу-молчу... ============================================== create procedure spTwoTwenties @key decimal(13) AS set nocount on declare @name varchar(500) select @name=name from TABLE where bKey=@key select @name Name, @key bKey into #tmp insert into #tmp (Name, bKey) select top 20 Name, bKey from TABLE where Name<@name order by Name ASC insert into #tmp (Name, bKey) select top 20 Name, bKey from TABLE where Name>@name order by Name DESC select * from #tmp order by Name ASC return ==================================================== Писано на коленке, поэтому на синт. ошибки не пеняйте. А если будут несколько записей со значением искомого bKey и совершенно разными Name? Постановка задачи некорректна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 14:49 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ, конечно каюсь, bKey является ключевым полем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 19:40 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Да и, к сожелению, решение не верно. Созданная Вами процедура возращает начало таблицы, искомую запись и конец таблицы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2002, 19:52 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
ASC с DESC поменяй, а DESC с ASC. Я идею давал, а не решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2002, 06:59 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Да, спасибо, все работает. Касаемо странности задачи, то проблема состоит в отыскании "одинаковых" позиций в таблице, например: Гарри Поттер и философский камень (Ролинг Дж.К.) Гарри Поттер-1 и философский камень (Ролинг Дж.К.) [12] ГДЗ-99 9кл.(о) Алгебра Ответы и решения к сб.заданий Кузнецова Л.В.,Бунимович Е.А.,Пигарев Б.П. и др. ГДЗ - 99 9кл.(о) Алгебра Ответы и решения к сб.заданий Кузнецовой Л.В. и др. [18] ... и т.п. На самом деле это одинаковые книги, и задача стоит в сведении их в одну позицию. Наверное тут требуется нетривиальный алгоритм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2002, 11:24 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
В первцю очер5едь требуется четко сформулировать правила формирования названия. Что касается литературы - я не специалист (хотя я бы плясал от всяких там ISBN 0-7821...), но уверен что и в Вашем случае можно вывести четкие правила. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2002, 12:27 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
А я бы подумал насчёт что-то типа хеш-функции? которая сворачивает название в некий код, а потом находит расстояние между этими кодами в их пространстве. Что-то подобное SOUNDEX и DIFF, но, разумеется, с другим алгоритмом свёртки Будет достаточно быстро. Осталось только придумать функцию свёртки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2002, 15:32 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
К сожелению, наименование продукции зависит от поставщиков, И вообще, на территории СНГ царит полная вакханалия по вопросу стандартизации. Например, некоторые издательства лепят баркоды на книги, так, для красоты (они могут совпадать с другим наименованием, или вообще быть, например, от туалетного мыла) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2002, 09:19 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Как бы между прочим, но почему бы не оценить возможность применения Full-Text Index-ов ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2002, 12:17 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Да вот, не ставиться полнотекстовый у меня, все дистрибутивы SQL7 попадаются кривые (или руки такие), да и хотел вообще на SQL2K перелазить. Там уж заодно и с fool-текстом разберусь и ключи с decimal на bigint наконец поменяю, и всякий прочий шоколад.... Да, не подскажет, достопочтенный, чем череват переход с 7 на 2К? (а то после этих переездов такая разруха начинается...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2002, 18:12 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Да, не подскажет, достопочтенный, чем череват переход с 7 на 2К? IMHO хуже не будет (а то после этих переездов такая разруха начинается...) Для начала можно установить уровень совместимости только для 7.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2002, 11:10 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
И сразу доп вопрос: пока нашел только SQL2K девелопер едишн дистрибутив. А какой лучше то? Что надо искать? какие ограничения на каждый релиз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2002, 15:45 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
По поводу версии SQL2K http://www.sql.ru/subscribe/072.shtml#1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 04:23 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
2 ChaiNik Как-то я для смеха написал такую функцию. Она ищет наибольший общий фрагмент текста и выдаёт его размер. Размер общих строк ограничивается @charcount (для ускорения). Что бы оно работало нужно иметь таблицу Millenium(num int) с числами от 0 до 999 CREATE FUNCTION compare (@word1 varchar(100), @word2 varchar(100), @charcount int) RETURNS int AS BEGIN declare @i1 int,@i2 int, @res int declare @w1 varchar(100), @w2 varchar(100) select @w1=upper(@word1),@w2=upper(@word2), @res=0 select @i1=datalength(@w1), @i2=datalength(@w2) select @res=max(sz.num) from Millenium s1, Millenium s2, Millenium sz where sz.num<=@charcount and s1.num<=@i1-sz.num+1 and s2.num<=@i2-sz.num+1 and substring(@w1,s1.num,sz.num)=substring(@w2,s2.num,sz.num) and sz.num>0 and s2.num>0 and s2.num>0 return @res END Как видно написано совершенно тупо, но как ни странно работает, естественно не быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 07:19 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
2 Чайник А как быть с теми поставщиками, которые перед названием еше и серию дают? (типа "Э.РБм.Испытание киллера") А с теми, которые насильно впихивают все названия в 20 символов для печати? ("Ист.боев.иск.3 От Нов.Света...") Немного off. По моему мнению, в книготорговле продвинутыми поставщиками считаются те, которые могут позволить себе делать прайс-листы в электронной форме. А тех, которые при этом публикуют свои уникальные коды (или ISBN), вообще по пальцам пересчитать можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 09:13 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
Тут, как говориться, медицина бессильна... Надо что-то мудрить с хеш функцией, как советует народ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2002, 06:37 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
я писал такую функцию на делфях для фарм. компании если надо, то icq #41468443 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2002, 07:34 |
|
||
|
Шмат из нутрей
|
|||
|---|---|---|---|
|
#18+
действительно интересная и непростая задача. я сейчас тоже с ней столкнулся... пока сделал в аксессе на vb попробую переложить алгоритм на tsql (кстати может кто поможет?) алгоритм следующий добавляем в таблицу поле схожесть обнуляем его по каждой записи из таблицы делаем следующее от 3 букв и до длинны искомой фразы проверяем соответствие 1-х 3 букв поля записи соответствию 1-х 3 букв искомой фразы если да увеличиваем поле похожесть на 10 ^ {количество букв}/1000 (это дает возможность различать похожесть из пяти букв от похожести из 3 или 4 как похожестьразной степени) во втором цикле если нет то увеличиваем счетчик символа (если длинна искомой фразы - число искомых символов <0 ) с которого ищем в строке записи и повторяем 1-й цикл в 3 цикле изменяем число искомых букв от 3 до длины искомой фразы и повторяем 2-й цикл в результате получаем поле для сортировки с различными по похожести записями... кстати результаты неожиданные...))) Private Sub Кнопка13_Click() If Len(Me.findstr) < 3 Then MsgBox "Для поиска небходимо ввести более 3 букв" Exit Sub End If Dim rst As New ADODB.Recordset rst.Open "client", CurrentProject.Connection, adOpenKeyset, adLockOptimistic 'обнуление Do Until rst.EOF rst!simple = 0 rst.Update rst.MoveNext Loop 'счетчик цикла Dim i Dim sss Dim str 'счетчик цикла Dim l Dim k str = Left(Me.findstr, 1 'прогресс бар Me.PB.Visible = True Me.PB.Max = Len(str) - 2 'k c какого символа начинается поиск For k = 1 To Len(str) - 3 Me.PB.value = k 'l- длина искомой фразы For l = 3 To Len(str) sss = Mid(str, k, l) rst.MoveFirst Do Until rst.EOF For i = 1 To Len(rst!name) - 2 If sss = Mid(rst!name, i, l) Then rst!simple = rst!simple + 10 ^ l / 1000 rst.Update End If Next i rst.MoveNext Loop Next l Next k Me.OrderBy = "simple DESC" Me.OrderByOn = True Me.Requery Me.PB.value = 0 Me.PB.Visible = False End Sub по быстрому написал так. даже работает )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2002, 08:02 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32025457&tid=1823252]: |
0ms |
get settings: |
12ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 402ms |

| 0 / 0 |
