Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день.
Таблица video с такими столбцами
id
category
country
и другими
Таблица category (здесь хранится список категорий)
id
name
В таблице video записи могут принимать значения сразу нескольких категорий, перечисляются в таком виде 1,6,15
Можно ли составить запрос для выборки записей с таблицы video со значением category=15 если там перечислено как я сказал выше?
Неактивен
Неактивен
Неактивен
Брр. Приведите пожалуйста содержимое таблиц и выборку, которую Вы хотите получить ).
Неактивен
Видимо
where category=15 or category like '15,%' or category like '%,15,%' or category like '%,15';
Неактивен
таблица video
таблица category
Отредактированно Dr1ks (23.12.2011 19:44:16)
Неактивен
Ну тогда да, либо решение от vasya, либо (что лучше) - заведите лучше таблицу rel_video_category, в которой будут id фильмов и id категорий. Таблица реализует отношение "многие ко многим".
То есть там будут такие значения:
id фильма id категории
1 1
1 2
1 3
2 1
2 2
2 4
3 1
3 5
В это случае запрос такой:
select v.* from video v join rel_video_category rvc on v.id=rvc.film_id where rvc.category_id=15
или (так медленнее, но на небольших объёмах сойдёт и так)
select * from video where id in (select film_id from rel_video_category where category=15)
Отредактированно deadka (24.12.2011 01:09:13)
Неактивен
deadka, vasya спасибо вам за помощь.
Неактивен
deadka,
почитав документацию я нашёл решение с помощью регулярных выражений
Отредактированно Dr1ks (06.01.2012 16:06:21)
Неактивен
Да, он не сможет использовать индексы и будет делать полный скан таблицы.
Неактивен
Значения типа '1,10,15' - зло !
Фулскана не избежать.
Однозначно создавать дополнительную таблицу rel_video_category (про которую писал deadka)
Легко перелить данные с вашей старой таблицы, можно так:
Неактивен
vasya написал:
Да, он не сможет использовать индексы и будет делать полный скан таблицы.
И вообще regexp - штука медленная.
Неактивен