2012-10-14 2 views
0

사용자가 많은 항목을 가지고 있지만 항목에 많은 범주가 있습니다.MYSQL 관계 및 쿼리 문제

내가 각 항목에 대한 항목 수를 찾아 사용자 계정의 테이블 표시 찾고 있어요 :

------------------------------- 
| Item Name | Number of Items | 
------------------------------- 
| Item 1 |  24  | 
| Item 2 |  18  | 
| Item 3 |  6  | 
------------------------------- 

나는 그것을 밖으로 작동하지 않을 수 있습니다 ... 사용자는 여러 항목 만이 있습니다 만 사용자 테이블

한 식별자는 사용자 테이블은 테이블을 user_items에 관한 것이다 ITEM_ID이 있습니까? user_items 테이블에는 item_id, 항목 이름 및 항목 수의 세 가지 필드가 있습니다.

누구든지 누울 수 있도록 도와주세요.

감사

+0

"* 각 항목의 항목 수 *"는 무엇을 의미합니까?"각 사용자의 항목 수"또는 "각 항목의 사용자 수"를 의미 했습니까? 또한 "카테고리"가 귀하의 질문과 관련이 있는지 명확하지 않습니다. – eggyal

답변

0
  • 항목이에 최대 한 사용자가 "소속"할 수 있다면, 바로 user 테이블에 item 테이블에 직접 FK를 저장 : 다음

    CREATE TABLE item (
        item_id SERIAL PRIMARY KEY, 
        item_name VARCHAR(20), 
        user_id BIGINT UNSIGNED, -- NOT NULL if every item must belong to a user 
        FOREIGN KEY (user_id) REFERENCES user (user_id) 
    ); 
    

    ,

    SELECT user_id, COUNT(*) AS num_items FROM item GROUP BY user_id; 
    
    : 사용자 당 항목 수를 가져올 수 항목이 동시에로 user_items 테이블 FKS에서 여러 사용자 저장소에 "소속"할 수있는 경우

    SELECT user.*, COUNT(*) AS num_items 
    FROM  user JOIN item USING (user_id) 
    GROUP BY user_id; 
    
  • : 당신이 user 테이블에서 관련된 사용자 정보를 가져도하고자하는 경우3210

    , 당신은 단지 SQL join을 수행해야합니다 useritem 테이블 반대로, 항목 당 사용자 수는

    SELECT user_id, COUNT(*) AS num_items FROM user_items GROUP BY user_id; 
    

    또는 : 다시

    SELECT item_id, COUNT(*) AS num_users FROM user_items GROUP BY item_id; 
    

    , 당신은 JOIN을 수행 할 수있는 그런

    CREATE TABLE user_items (
        item_id BIGINT UNSIGNED NOT NULL, 
        user_id BIGINT UNSIGNED NOT NULL, 
        FOREIGN KEY (item_id) REFERENCES item (item_id), 
        FOREIGN KEY (user_id) REFERENCES user (user_id) 
    ); 
    

    사용자 당 항목 수를 가져올 수 필요에 따라 다른 테이블에서 관련 정보를 가져옵니다.

  • item 테이블에 FK를 저장하지 마십시오. 사용자가 최대 하나의 항목을 가질 수 있습니다.

    CREATE TABLE user (
        user_id SERIAL PRIMARY KEY, 
        item_id BIGINT UNSIGNED  -- don't do this 
    ); 
    
0

사용자 - 항목 정보는, User_items 저장 - - 상점 ID와 해당 itemId

는 기본 쿼리는 아래와 같은 것, 그런 다음 결과를 표시 할 수 있습니다 사용자 정보는, 항목 저장 항목별로. SELECT *는 모든 테이블의 모든 행을 반환합니다. 따라서 모든 user, item 및 user_items 정보를 얻을 수 있습니다.

SELECT * FROM user_items 
JOIN items on user_items.itemId = items.itemId 
WHERE userId = $yourUserID 
GROUP BY itemId