0

ユーザーには多くのアイテムがありますが、アイテムには多くのカテゴリがあります。

各アイテムのアイテム数を見つけるテーブルをユーザーアカウントに表示しようとしています。

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

うまくいきません...ユーザーは複数のアイテムを持っていますが、ユーザーテーブルには1つの識別子しかありません

Userテーブルには、user_itemsテーブルに関連するitem_idがありますか?user_itemsテーブルには、item_id、アイテム名、アイテム数の3つのフィールドがあります。

誰かがナブレットを手伝ってくれますか?

ありがとう

4

2 に答える 2

0
  • アイテムが最大で1人のユーザーに「属する」ことができる場合は、itemテーブルに直接FKをテーブルに格納しuserます。

    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;
    

    テーブルから関連するユーザー情報も取得する場合は、 SQL結合userを実行するだけです。

    SELECT   user.*, COUNT(*) AS num_items
    FROM     user JOIN item USING (user_id)
    GROUP BY user_id;
    
  • アイテムが同時に複数のユーザーに「属する」ことができる場合は、テーブルFKをとテーブルuser_itemsの両方に保存します。useritem

    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)
    );
    

    次に、ユーザーごとのアイテム数を取得するには、次のようにします。

    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この場合も、必要に応じて、を実行して他のテーブルから関連情報をフェッチできます。

  • ユーザーが最大で1つのアイテムを持つことができない限り、テーブルuserにFKを格納しないでください。item

    CREATE TABLE user (
      user_id SERIAL PRIMARY KEY,
      item_id BIGINT UNSIGNED      -- don't do this
    );
    
于 2012-10-14T10:00:01.297 に答える
0

Users-ユーザー情報のみを格納します。Items-アイテム情報のみを格納します。User_items-userIdとitemIdを格納します。

基本的なクエリは次のようになります。その後、アイテムごとに結果を表示できます。SELECT *は、すべてのテーブルからすべての行を返します。したがって、すべてのuser、item、およびuser_items情報を取得します。

SELECT * FROM user_items
JOIN items on user_items.itemId = items.itemId
WHERE userId = $yourUserID
GROUP BY itemId
于 2012-10-14T10:11:48.210 に答える