2010-07-12 10 views
0

Новое в mysql и php, так что простите любую очевидную глупость, пожалуйста!Поиск полей MySQL с похожими полями

В одной из таблиц mysql есть поля категорий, индексированные из таблицы категорий. Каждая из категорий называется category_1, category_2, category_3 и т.д.

Я предполагаю, что я не могу использовать маску для поиска этих категорий, как:

'SELECT * FROM products_table WHERE category_% ="furniture"' 

, как я получаю ошибка синтаксиса.

Как бы я лучше всего это сделал?

TIA.

ответ

3

Если вы должны придерживаться этой модели, вы должны перечислить все столбцы

Where 'furniture' In (category_1, category_2, category_3) 

или создать запрос динамически.


Лучшим решением было бы нормализовать вашу модель.

Определить другую таблицу (например, categories), содержащие все категории, а также другую таблицу (например, product_categories), содержащие идентификаторы продуктов и категорий, которые соответствуют:

products (id, ...) 
categories (id, name) 
product_categories (product_id, category_id) 

Это позволит вам найти все продукты с определенная категория:

Select p.id 
From categories c 
Join product_categories pc On (pc.category_id = c.category_id) 
Join products p On (p.product_id = pc.product_id) 
Where c.name = 'furniture' 
+0

Спасибо, я уверен, что это лучшее решение.Я просто очень стараюсь найти полезные руководства по настройке такой базы данных. Как я уже сказал, я очень новичок в mysql. Я провел около 4 дней, ударяя головой о кирпичную стену mysql. У меня сильная головная боль. – circey

1

Это не то, что должно сработать. База данных предназначена для размещения информации, хранящейся в определенной структуре, с заданными ограничениями, а не для определения ограничений, которые могли бы найти некоторую информацию. Табличные индексы не строятся для того, что вы пытаетесь сделать.

Вы должны либо записать все имена столбцов, либо использовать хранимую процедуру для создания динамических SQL-запросов.

Тот факт, что вы являетесь , пытается найти, чтобы сделать это, является сильным индикатором того, что ваша схема базы данных должна быть переоценена. В частности, если между продуктами и категориями существует много ко многим, должны быть три таблицы: продукты, категории и продукты.

1

Вы должны указать все имена полей, конечно, т.е.

where category_1 = ... OR category_2 = ... etc. 

Но если вы используете такие колонки, ваша модель кажется неправильной. Чтобы определить несколько категорий для каждого продукта, вы должны создать продукт, категории и таблицу ссылок. Таблица ссылок будет содержать только те продукты и категории, которые определяют, к какой категории принадлежит продукт (и, следовательно, вы можете иметь несколько категорий для каждого продукта).

0

Используйте один запрос для извлечения имен столбцов

SHOW COLUMNS FROM db.table WHERE Field like 'category_%'; 

Затем используйте столбец «Поле», чтобы построить запрос

Смежные вопросы