SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.11.2014 22:45:11

filot
Участник
Откуда: Севастополь
Зарегистрирован: 23.08.2014
Сообщений: 18

Отобрать записи MySQL + PHP

Добрый вечер! Подскажите пожалуйста как можно организовать такую систему на сайте.

Необходимо отбирать записи из MySQL. У каждой строки есть свой ID, Region, Category.
В Region - хранятся список регионов данной записи через запятую, напр.: Москва, Уфа.
В Category - хранятся категории разделеные ; точкой с запятой, напр.: Конфеты;Фрукты.

Так вот пользователь выбирает в фильтре на сайте несколько значении регионов (region) и категории (category) - они формируются по той же схеме (точка запятая, просто запятые).

Вопрос, как мне отбирать записи, выводить только те у которых есть хотя бы одно из выбранных значении из перечня регионов и категории?

Отредактированно filot (13.11.2014 18:31:17)

Неактивен

 

#2 15.11.2014 21:27:01

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Отобрать записи MySQL + PHP

Довольно сложная с точки зрения БД задача. Дело в том, что Вы выбрали не нормальную форму базы данных ( https://ru.wikipedia.org/wiki/%CD%EE%F0 … E%F0%EC%E0 ), поэтому SQL не предлагает решений.

Обойти можно примерно так. Пусть ищем катерию "книги" в колонке categories=",книги,столы,шкафы,". Такое можно сделать операцией LIKE (поиск фрагмента посредством сканирования всего текста).
WHERE categories LIKE "%,книги,%"

Важно, что список категорий начинается и заканчивается запятой. Поиск нескольких вариантов - или OR или UNION, что в обоих случаях приведет к дополнительной потере производительности.

Неактивен

 

#3 15.11.2014 22:09:49

filot
Участник
Откуда: Севастополь
Зарегистрирован: 23.08.2014
Сообщений: 18

Re: Отобрать записи MySQL + PHP

rgbeast написал:

Довольно сложная с точки зрения БД задача. Дело в том, что Вы выбрали не нормальную форму базы данных ( https://ru.wikipedia.org/wiki/%CD%EE%F0 … E%F0%EC%E0 ), поэтому SQL не предлагает решений.

Обойти можно примерно так. Пусть ищем катерию "книги" в колонке categories=",книги,столы,шкафы,". Такое можно сделать операцией LIKE (поиск фрагмента посредством сканирования всего текста).
WHERE categories LIKE "%,книги,%"

Важно, что список категорий начинается и заканчивается запятой. Поиск нескольких вариантов - или OR или UNION, что в обоих случаях приведет к дополнительной потере производительности.

Спасибо за Ваш ответ, тема закрыта

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson