powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Шмат из нутрей
20 сообщений из 20, страница 1 из 1
Шмат из нутрей
    #32025261
ChaiNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача застала в-рас-плох.

Есть таблица [Name varchar(500), bKey decimal(13)] около 100 тыс. зап.
Надо выделить набор состоящий из 20 записей перед и 20 после искомой (ищем по bKey), причем в алфавитном порядке всей таблицы.

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

З.Ы.
На ум приходят всякие дополнительный столбцы и пр., но хочется красивее и так чтоб ни одно животное при этом не пострадало...
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025268
Dankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задачка очень даже странная. Ну, ладно, молчу-молчу...

==============================================
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? Постановка задачи некорректна.
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025289
ChaiNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ, конечно каюсь, bKey является ключевым полем...
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025292
ChaiNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и, к сожелению, решение не верно. Созданная Вами процедура возращает начало таблицы, искомую запись и конец таблицы...
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025326
Dankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASC с DESC поменяй, а DESC с ASC. Я идею давал, а не решение
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025384
ChaiNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, спасибо, все работает.
Касаемо странности задачи, то проблема состоит в отыскании "одинаковых" позиций в таблице, например:

Гарри Поттер и философский камень (Ролинг Дж.К.)
Гарри Поттер-1 и философский камень (Ролинг Дж.К.) [12]

ГДЗ-99 9кл.(о) Алгебра Ответы и решения к сб.заданий Кузнецова Л.В.,Бунимович Е.А.,Пигарев Б.П. и др.
ГДЗ - 99 9кл.(о) Алгебра Ответы и решения к сб.заданий Кузнецовой Л.В. и др. [18]
... и т.п.

На самом деле это одинаковые книги, и задача стоит в сведении их в одну позицию. Наверное тут требуется нетривиальный алгоритм...
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025393
sysop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первцю очер5едь требуется четко сформулировать правила формирования названия. Что касается литературы - я не специалист (хотя я бы плясал от всяких там ISBN 0-7821...), но уверен что и в Вашем случае можно вывести четкие правила.
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025438
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы подумал насчёт что-то типа хеш-функции? которая сворачивает название в некий код, а потом находит расстояние между этими кодами в их пространстве.
Что-то подобное SOUNDEX и DIFF, но, разумеется, с другим алгоритмом свёртки
Будет достаточно быстро.
Осталось только придумать функцию свёртки
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025457
Chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожелению, наименование продукции зависит от поставщиков, И вообще, на территории СНГ царит полная вакханалия по вопросу стандартизации. Например, некоторые издательства лепят баркоды на книги, так, для красоты (они могут совпадать с другим наименованием, или вообще быть, например, от туалетного мыла)
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025463
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как бы между прочим, но почему бы не оценить возможность применения Full-Text Index-ов ?
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025466
ChaiNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да вот, не ставиться полнотекстовый у меня, все дистрибутивы SQL7 попадаются кривые (или руки такие), да и хотел вообще на SQL2K перелазить. Там уж заодно и с fool-текстом разберусь и ключи с decimal на bigint наконец поменяю, и всякий прочий шоколад....
Да, не подскажет, достопочтенный, чем череват переход с 7 на 2К? (а то после этих переездов такая разруха начинается...)
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025530
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, не подскажет, достопочтенный, чем череват переход с 7 на 2К?
IMHO хуже не будет


(а то после этих переездов такая разруха начинается...)
Для начала можно установить уровень совместимости только для 7.0
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025575
ChaiNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И сразу доп вопрос: пока нашел только SQL2K девелопер едишн дистрибутив. А какой лучше то? Что надо искать? какие ограничения на каждый релиз?
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025611
Rmax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу версии SQL2K
http://www.sql.ru/subscribe/072.shtml#1
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025624
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

Как видно написано совершенно тупо, но как ни странно работает, естественно не быстро.
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025660
Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Чайник

А как быть с теми поставщиками, которые перед названием еше и серию дают?
(типа "Э.РБм.Испытание киллера")

А с теми, которые насильно впихивают все названия в 20 символов для печати?
("Ист.боев.иск.3 От Нов.Света...")

Немного off.

По моему мнению, в книготорговле продвинутыми поставщиками считаются те, которые могут позволить себе делать прайс-листы в электронной форме.

А тех, которые при этом публикуют свои уникальные коды (или ISBN), вообще по пальцам пересчитать можно.
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025759
Chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут, как говориться, медицина бессильна...

Надо что-то мудрить с хеш функцией, как советует народ...
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32025963
Фотография boogier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я писал такую функцию на делфях для фарм. компании если надо, то icq #41468443
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32026834
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
действительно интересная и непростая задача.
я сейчас тоже с ней столкнулся...
пока сделал в аксессе на 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

по быстрому написал так. даже работает ))
...
Рейтинг: 0 / 0
Шмат из нутрей
    #32026835
туда же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там где
str = Left(Me.findstr, 18 )
str = Left(Me.findstr, 18 ) обрезание поиска 18 символами а то и так долго работает
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Шмат из нутрей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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