문제

3 개의 테이블이 있습니다.

범주 doesnt matter

item2cat : itemID|catID

안건: id|name|desc

주어진 카테고리에있는 항목을 나열하고 싶지만 간단한 방식으로 수행하는 방법을 모르겠습니다. (PHP 및 MySQL 포함)

하나의 항목에 여러 범주를 원하기 때문에이 테이블 구조가 필요합니다.

도움이 되었습니까?

해결책

당신은 아마 원할 것입니다 가입하다 항목 테이블의 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])

업데이트
다음과 같은 테이블 ID를 변경 한 경우 :

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 모든 테이블의 열은 이제 모호하지 않습니다.

다른 팁

이것은 효율적이어야하며 주어진 범주에서 모든 관련 항목을 가져와야합니다.

SELECT item.* 
   FROM item2cat
      JOIN item 
   ON item.id = item2cat.itemID
      and item2cat.catID = $categoryID
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top