MySQL запрашивает продукты из одной таблицы, только если они появляются в определенной таблице категорий - PullRequest
0 голосов
/ 23 января 2010

У меня есть следующие таблицы:

Products:
  id, name, ...

Products_in_Categories
  id, category_id, product_id

Categories
  id, name, ...

У меня есть страница администратора, где я хочу, чтобы он мог искать товары по имени, идентификатору каталога и т. Д. И, конечно, по категории, имени и идентификатору каталога ...

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

Использую ли я какие-то старые методы или это способ хранения? Я знаю и использовал сериализацию и десериализацию, но я не хотел использовать это здесь.

Любая помощь будет очень признательна, спасибо!

Ответы [ 2 ]

1 голос
/ 23 января 2010

Нет ничего плохого в том, как вы храните свои продукты, эти три таблицы являются правильным способом хранения такого рода отношений.

SELECT *
FROM Categories c
JOIN Products_in_Categories pic ON ( pic.category_id = c.category_id )
JOIN Products p ON ( p.id = pic.product_id )
WHERE c.name = 'YOUR_CATEGORY_NAME';

Замените YOUR_CATEGORY_NAME на название категории, которую вы ищете. Если вы хотите, чтобы пользователь мог вводить только часть имени, замените WHERE c.name = 'YOUR_CATEGORY_NAME'; на

WHERE c.name LIKE '%CATEGORY_NAME_PART%;
0 голосов
/ 23 января 2010
SELECT p.* FROM products as p
LEFT JOIN Products_in_Cateogries pc ON pc.product_id = p.id,
LEFT JOIN Categories c ON c.id = pc.categroy_id
WHERE c.name = 'CATEGORY A'

вам также не нужно иметь идентификатор в таблице Products_in_Categories, поскольку комбинация category_id и product_id уникальна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...