Подскажите идею как выбрать данные из БД

anik777

Новичок
Подскажите идею как выбрать данные из БД

Приветствую, коллеги!

Обозначилась у меня задачка найти в базе записи отвечающие запросу юзверя и сформировать линк на файл определенного вида. Когда в запросе одно слово (например: "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)

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

baev

‹°°¬•
Команда форума
anik777, сложно это всё...
Нужно таблицу саму к себе джойнить столько раз, сколько слов во фразе.
И нужна куча дополнительных условий типа: "StreamName первого слова равен StreamName второго слова равен StreamName третьего слова ... и т.д".
И при этом ещё нужно, чтобы разница Time_marker'ов для рядом-стоящих слов была минимальна...
 

anik777

Новичок
baev
Спасибо за оперативный ответ, абсолютно верное понимание задачи :)
буду думать в этом направлении.

Кстати, а как правильно делать с точки зрения быстродействия и наименьшей нагрузки на MySQL сервер, если учесть что все это на одном серваке:
- для каждой выборки создавать временную таблицу в БД и работать с ней (возможно придется еще создавать врем. таблицы)
- или же сразу весь результат пихать в массив и уже работать с ним без спользования MySQL
 
Сверху