1

我有下面的三个表,我希望从中获得以下选择:

1.)从给定用户中选择所有项目collaboration并将它们分组 这意味着当用户登录时,(s)他将看到所有(并且仅)属于他是组成员的组的项目。 2.) 对于每个,选择所有协作项目。 这意味着当用户从上面的 1 中选择任何组 ( ) 时,他将看到属于所选组 ( )的所有项目group_idgroup_members
collaboration

group_id
group_idcollaborationgroup_id

约束:每个用户必须是组成员。该users表是供用户使用firstnamelastname

这是我尝试1无济于事!



    函数 OrderByGroup_id($username) {
      $数据 = 数组();
      $当前时间=时间();
      $q = "
      选择 *
      FROM 合作
      INNER JOIN group_members ON Collaboration.group_id = group_members.group_id
      INNER JOIN users ON users.username = group_members.username
      其中collaboration.parent_id 为NULL 并且collaboration.is_comment = 0
      AND group_members.username = :user group bycollaboration.group_id";
      $sq = $this->connection->prepare($q);
      $sq->execute(array(':user' => $username));
    而($row = $sq->fetch()) {
      $json = 数组();
      $json['title'] = $row['title'];
      $json['question'] = $row['content'];
      $json['firstname'] = $row['firstname'];
      $json['姓氏'] = $row['姓氏'];
      $json['timestamp'] = $row['timestamp'];
      $json['key'] = $row['group_id'];
      $数据[] = $json;
     }
      $allposts =json_encode($data);
      返回 $allposts= json_decode($allposts, true);
    }


这是表格

如果不存在“协作”,则创建表(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) 默认为 NULL,
  `group_id` varchar(255) 默认为空,
  `author` varchar(30) NOT NULL,
  `title` varchar(255) 默认为空,
  `content` 文本不为空,
  `is_comment` tinyint(1) 无符号非空,
  `file` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `points` int(11) 默认为空,
  `timestamp` int(11) NOT NULL,
  主键(`id`)
) 引擎=InnoDB 默认字符集=utf8;
如果不存在“用户”,则创建表(
  `firstname` varchar(30) NOT NULL,
  `lastname` varchar(30) NOT NULL,
  `username` varchar(30) NOT NULL,
  主键(`用户名`)
) 引擎=InnoDB 默认字符集=utf8;
如果不存在 `group_members` 则创建表(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) NOT NULL,
  `group_id` varchar(50) NOT NULL,
  `status` tinyint(1) 无符号非空,
  `timestamp` int(11) NOT NULL,
  主键(`id`)
) 引擎=InnoDB 默认字符集=utf8;

感谢您的输入!

4

1 回答 1

0

以下选择确实提供了问题 1 的请求。但是,我知道查询不是最佳的,因为我确实选择了目前不需要的条目。例如使用 *
我只想从协作中选择title, content, timestamp, , 从用户中选择, ,group_idfirstnamelastname

    
    SELECT * FROM 协作
    INNER JOIN group_members ON Collaboration.group_id = group_members.group_id
    INNER JOIN users ON users.username =collaboration.author
    其中collaboration.parent_id 为NULL 并且collaboration.is_comment = 0
    AND group_members.username = :user
    GROUP BY 协作.group_id
    ORDER BY Collaboration.timestamp DESC
于 2012-11-09T08:56:34.730 回答