Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Подскажите идею как выбрать данные из БД (Anik777) 20/04/2007 - 18:56:57



From: Anik777 - 20/04/2007 - 18:56:57
Subject:Подскажите идею как выбрать данные из БД
-----------------
Приветствую, коллеги!

Обозначилась у меня задачка найти в базе записи отвечающие запросу юзверя и сформировать линк на файл определенного вида. Когда в запросе одно слово (например: "WASHINGTON"), то проблем никаких. А вот как найти фразу никак не могу придумать при моей организации таблицы, которую изменить нельзя.

Есть табличка вот такого вида:

Код:

"ID_STREAM";"ID_CHANNEL";"Time_marker"; "Content"
================================================
"1"; "1"; "480"; "IN"
"1"; "1"; "640"; "WASHINGTON"
"1"; "1"; "1100"; "TODAY"
"1"; "1"; "1390"; "CONGRESSIONAL"
"1"; "1"; "1970"; "COMMITTEE"
"1"; "1"; "2310"; "IS"
"1"; "1"; "2420"; "BEEN"
"1"; "1"; "2540"; "STUDYING"
"1"; "1"; "3010"; "BAD"
"1"; "1"; "3450"; "OR"
"1"; "1"; "3730"; "WORSE"
"1"; "1"; "4270"; "BEHAVIOR"
"1"; "1"; "4940"; "IN"
"1"; "1"; "5080"; "THE"
"1"; "1"; "5310"; "AIR"
"1"; "1"; "6100"; "BY"
"1"; "1"; "6220"; "WHICH"
"1"; "1"; "6430"; "TO"
"1"; "1"; "6530"; "BE"
"2"; "1"; "6670"; "IN"
"2"; "1"; "6740"; "THE"
"2"; "1"; "6860"; "INCREASINGLY"
"2"; "1"; "7580"; "EVIDENT"
"2"; "1"; "8010"; "PROBLEM"
"2"; "1"; "8370"; "OF"
"2"; "1"; "8540"; "AIRLINE"
"2"; "1"; "9120"; "PASSENGERS"
"2"; "1"; "9660"; "TO"
"2"; "1"; "9760"; "GET"



К этой табличке в придачу есть еще две.
Пусть запрос пользователя найти фразу "IN THE AIR"
Делаю запрос к базе вида:


Код:

SELECT asr_content_eng.*,
asr_streams.*,
asr_channels.*
FROM asr_content_eng
JOIN asr_streams ON
asr_content_eng.ID_STREAM=asr_streams.ID_STREAM
LEFT JOIN asr_channels ON
asr_content_eng.ID_CHANNEL=asr_channels.ID_CHANNEL
WHERE Content="THE" or Content="AIR" or Content="IN"
ORDER BY
asr_content_eng.ID_CHANNEL,
asr_content_eng.ID_STREAM,
asr_content_eng.Time_marker
LIMIT 0 , 30



Получаю некий набор данных отсортированный по полям (ID_STREAM, ID_CHANNEL, Time_marker)


Код:

ID_STREAM ID_CHANNEL Time_marker Content StreamName StreamDate
==================================================================
1 1 480 IN 20070401.wav 1165854823
1 1 4940 IN 20070401.wav 1165854823
1 1 5080 THE 20070401.wav 1165854823
1 1 5310 AIR 20070401.wav 1165854823
1 1 6670 IN 20070401.wav 1165854823
1 1 10720 THE 20070401.wav 1165854823
1 1 13600 IN 20070401.wav 1165854823
1 1 28490 THE 20070401.wav 1165854823
1 1 34900 THE 20070401.wav 1165854823
1 1 37200 IN 20070401.wav 1165854823
1 1 37300 THE 20070401.wav 1165854823
2 1 179 THE 20070328.wav 1176148800
2 1 3390096 THE 20070328.wav 1176148800
2 1 6740965 THE 20070328.wav 1176148800



Вопрос: Каким макаром в этом наборе данных найти точно фразу "IN THE AIR" и
состряпать ссылку на файл вида \\server\folder\20070401.wav?start=4940-1000end=5310+1000
(значения start & end беруться из поля Time_Marker для Первого и Последнего слова в фразе -/+ 1000)

Поясню, если бы слова писались предложениями или некими блоками в БД, то нет проблем найти вхождение строки поиска в поле Content (например: WHERE Content = 'IN THE AIR').
А у меня то каждое слово в своей записи, единственное что их связывает - это временная метка (Time_marker).
Грубо говоря, мне нужно выбрать данные по строке поиска ("IN THE AIR") где значения поля (Time_marker) для каждого слова в строке поиcка самые близкие друг к другу. При этом не допустимо выборка записей в иной последовательности слов от строки запроса. Надеюсь теперь понятно объяснил.
Есть у меня предположение, что запросом к базе эту задачу не решить - надо в скрипте разбирать и анализировать полученые записи в массиве или еще как.
Но вот как, что то никак не придумать.

Пните меня в нужном направлении, пожалуйста!
Может кто то решал подобную задачку, какие есть идеи?


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
31333



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |