Как сделать выборку из базы по определенной категории?

Суть вопроса такая: есть очень старый сайт на пэхе, две таблицы в MySQL
table1 (товары/услуги)
-----------------------
| id | name | cat_id |
-----------------------
и table2 (сами категории и атрибуты категорий)
---------------------------
| id | name | desc | etc. |
---------------------------

В поле `cat_id` есть такие записи, как:
  • 1
  • 1, 2
  • 2
  • 10
  • 11
  • 10, 11
  • 2, 11

где и указываются id категорий, через запятую. Мне нужно выбрать товары/услуги, которые принадлежат, например, первой категории.

Сейчас, пока категорий не более 20 сделал быстрый костыль, но срочно нужно нормально решение, а не это вот:
$multicat = ($cat['id'] !=1 )?"(`category` REGEXP '".$cat['id']."(?=,|$)' or `category`='".$cat['id']."')":"(`category` REGEXP '".$cat['id']."(?=,)' or `category`='".$cat['id']."')";

$select = 'select `name` from `table1` where '.$multicat.' order by `id` asc');


Этот сиюминутный в*сер нужно срочно убирать!

PS: все id категории через запятую указываются по возрастанию.
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
срочно нужно нормально решение
Измените структуру БД. Другого решения тут просто быть не может.
Ответ написан
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
... WHERE `category_id` LIKE '%,12,%'
upd. А вообще нормальное решение - это нормализация БД. Добавьте таблицу связи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы