Список предметов по категориям - PullRequest
2 голосов
/ 07 февраля 2010

У меня есть 3 таблицы:

категория doesnt matter

item2cat: itemID|catID

пункт: id|name|desc

Я хочу перечислить предметы, которые находятся в данной категории, но я не знаю, как это сделать простым способом. (С PHP и MySQL)

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

Ответы [ 2 ]

2 голосов
/ 07 февраля 2010

Возможно, вы хотите присоединиться к таблице item2cat в вашей таблице предметов:

SELECT
  item.id
, item.name
, item.desc
FROM item
INNER JOIN item2cat ON item.id = item2cat.itemID
WHERE item2cat.catID = [category_id]

или например

SELECT
  item.id
, item.name
, item.desc
, category.id
, category.name
FROM item
INNER JOIN item2cat ON item.id = item2cat.itemID
INNER JOIN category ON item2cat.catID = category.id
WHERE category.id IN ( [category_id], [category_id], [category_id])

UPDATE
Если вы изменили идентификаторы таблицы следующим образом:

item (itemId, name, desc)
item2cat (itemId, categoryId)
category (categoryId, name, etc)

вы можете переписать первый запрос, например:

SELECT
  item.itemId
, item.name
, item.desc
FROM item
INNER JOIN item2cat USING( itemId )
WHERE item2cat.categoryId = [category_id]

Еще одним преимуществом является то, что столбец id каждой таблицы теперь однозначен.

0 голосов
/ 07 февраля 2010

Этот должен быть эффективным и получить все соответствующие предметы в данной категории:

SELECT item.* 
   FROM item2cat
      JOIN item 
   ON item.id = item2cat.itemID
      and item2cat.catID = $categoryID
...