M
M_A_N
Прохожие
- Автор темы
- #1
Приветствую, коллеги!
Обозначилась у меня задачка найти в базе записи отвечающие запросу юзверя и сформировать линк на файл определенного вида. Когда в запросе одно слово (например: "WASHINGTON"), то проблем никаких. А вот как найти фразу никак не могу придумать при моей организации таблицы, которую изменить нельзя.
Есть табличка вот такого вида:
К этой табличке в придачу есть еще две.
Пусть запрос пользователя найти фразу "IN THE AIR"
Делаю запрос к базе вида:
Получаю набор данных отсортированный по полям (ID_STREAM, ID_CHANNEL, Time_marker)
Вопрос: Каким макаром в этом наборе данных найти точно фразу "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ка самые близкие друг к другу. При этом не допустимо выборка записей в иной последовательности слов от строки запроса. Надеюсь теперь понятно объяснил.
Есть у меня предположение, что запросом к базе эту задачу не решить - надо в скрипте разбирать и анализировать полученые записи в массиве или еще как.
Но вот как, что то никак не придумать.
Пните меня в нужном направлении, пожалуйста!
Может кто то решал подобную задачку, какие есть идеи?
Обозначилась у меня задачка найти в базе записи отвечающие запросу юзверя и сформировать линк на файл определенного вида. Когда в запросе одно слово (например: "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"
Делаю запрос к базе вида:
PHP:
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ка самые близкие друг к другу. При этом не допустимо выборка записей в иной последовательности слов от строки запроса. Надеюсь теперь понятно объяснил.
Есть у меня предположение, что запросом к базе эту задачу не решить - надо в скрипте разбирать и анализировать полученые записи в массиве или еще как.
Но вот как, что то никак не придумать.
Пните меня в нужном направлении, пожалуйста!
Может кто то решал подобную задачку, какие есть идеи?