За последние 24 часа нас посетили 18042 программиста и 1591 робот. Сейчас ищут 1009 программистов ...

поиск в mysql значен по полю с цифрами разделенными запятыми

Тема в разделе "PHP для новичков", создана пользователем LanKasper, 26 ноя 2007.

  1. LanKasper

    LanKasper Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    27
    Симпатии:
    0
    Доброго времени.

    Есть база, в ней таблица films, в ней для каждого фильма есть строка actors в которой записаны ID-актеров из таблицы actors

    Выглядит примерно так:
    Код (Text):
    1. caption  FilmName
    2. actors   12, 265, 14, 345, 3810
    У меня появилась задача указать для одного актера все фильмы в котороых он снимался. Т.Е. найти все записи в поле actors в значении которых встречается ID-актера.

    Все вроде бы просто, но получается так: ищу по полю actors
    [sql]SELECT * FROM films Where actors LIKE "%$id%"[/sql]
    , находятся записи в которых содержастя 12 и также такие как например 1240, 3012 и тп. оно и ясно из выражения %$id%...

    Подскажите, пожалуйста, как реализовать поиск по таблице?
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    изучить, чем отличается лайк от строгого сравнения.
     
  3. LanKasper

    LanKasper Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    27
    Симпатии:
    0
    Я как бы могу понять что мне не нужен лайк, я это так и указал. Так же мне не нужно и жесткое сравнение. Потому и прошу помощи, может кто сталкивался с подобной задачей.
     
  4. Mavir

    Mavir Guest

    Лучше было бы хранить в отдельной таблицы связи id_film, id_actor

    А здесь может помочь регулярное выражение.
     
  5. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    А, понял. СТруктура неоптимальна, будет тормозить на большой базе. Правильней будет вынести связи в отдельную таблицу.
    А тут поможет FIND_IN_SET
     
  6. LanKasper

    LanKasper Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    27
    Симпатии:
    0
    Сейчас конструирую переход связей в отдельную таблицу, но для данной системы нашел выход по регулдярным выражениям, а именно:

    [sql]SELECT * FROM films Where actors REGEXP "[[:<:]]".$id."[[:>:]]" [/sql]

    Выводит качественные результаты. Но время выполнения еще не проверял.