1

以下の3つのテーブルから、次の選択肢を取得します

。1.)すべてのアイテムを選択し、特定のユーザーごとにcollaborationグループ化しgroup_idます。 これは、ユーザーがログインすると、すべてのアイテムが表示されることを意味します。 (そして唯一の)彼がグループメンバーであるグループに属するアイテム。 2.)それぞれについて、すべてのコラボレーションアイテムを選択します。 これは、ユーザーが上記の1から任意のグループ()を選択すると、選択したグループ( )に属するすべてのアイテムが表示されることを意味します。group_members
collaboration

group_id
group_idcollaborationgroup_id

制約:各ユーザーはグループメンバーである必要があります。usersテーブルは、ユーザーの供給firstnameと提供のためにlastnameあります。

これは私が1から無駄にしようとしたことです!



    関数OrderByGroup_id($ username){
      $ data = array();
      $ currenttime = time();
      $ q = "
      選択する *
      コラボレーションから
      INNER JOIN group_members ON Collaboration.group_id = group_members.group_id
      ユーザーの内部参加users.username=group_members.username
      WHERE Collaboration.parent_id IS NULL and Collaboration.is_comment = 0
      AND group_members.username =:コラボレーションによるユーザーグループ.group_id ";
      $ sq = $ this-> connection-> prepare($ q);
      $ sq-> execute(array(':user' => $ username));
    while($ row = $ sq-> fetch()){
      $ json = array();
      $ json ['title'] = $ row ['title'];
      $ json ['question'] = $ row ['content'];
      $ json ['firstname'] = $ row ['firstname'];
      $ json ['lastname'] = $ row ['lastname'];
      $ json ['timestamp'] = $ row ['timestamp'];
      $ json ['key'] = $ row ['group_id'];
      $ data [] = $ json;
     }
      $ allposts = json_encode($ data);
      $ allposts = json_decode($ allposts、true);を返します。
    }


これが表です

存在しない場合はテーブルを作成`コラボレーション`(
  `id` int(11)NOT NULL AUTO_INCREMENT、
  `parent_id` int(11)DEFAULT NULL、
  `group_id` varchar(255)DEFAULT NULL、
  `author` varchar(30)NOT NULL、
  `title` varchar(255)DEFAULT NULL、
  `content`テキストNOTNULL、
  `is_comment` tinyint(1)unsigned NOT NULL、
  `file` tinyint(1)unsigned NOT NULL DEFAULT '0'、
  `points` int(11)DEFAULT NULL、
  `timestamp` int(11)NOT NULL、
  主キー( `id`)
)ENGINE = InnoDB DEFAULT CHARSET = utf8;
存在しない場合はテーブルを作成する`users`(
  `firstname` varchar(30)NOT NULL、
  `lastname` varchar(30)NOT NULL、
  `username` varchar(30)NOT NULL、
  主キー( `username`)
)ENGINE = InnoDB DEFAULT CHARSET = utf8;
存在しない場合はテーブルを作成`group_members`(
  `id` int(11)NOT NULL AUTO_INCREMENT、
  `username` varchar(30)NOT NULL、
  `group_id` varchar(50)NOT NULL、
  `status` tinyint(1)unsigned NOT NULL、
  `timestamp` int(11)NOT NULL、
  主キー( `id`)
)ENGINE = InnoDB DEFAULT CHARSET = utf8;

ご入力いただきありがとうございます。

4

1 に答える 1

0

次の select は、質問 1 の要求を提供します。ただし、現時点では必要のないエントリを選択しているため、クエリが最適ではないことはわかっています。たとえば、*
I want to select only title, content, timestamp,group_idからのコラボレーションfirstname, , のユーザーlastnameからの使用

    
    SELECT * FROM コラボレーション
    内部結合 group_members ON Collaboration.group_id = group_members.group_id
    INNER JOIN users ON users.username = Collaboration.author
    WHERE Collaboration.parent_id が NULL で、collaboration.is_comment = 0
    AND group_members.username = :user
    GROUP BY コラボレーション.group_id
    ORDER BY コラボレーション.タイムスタンプ DESC
于 2012-11-09T08:56:34.730 に答える