【问题标题】:Select from three tables - mysql and php从三个表中选择 - mysql 和 php
【发布时间】:2012-10-29 04:58:17
【问题描述】:
我有以下三个表格,我希望从中获得以下选择:
1.) 从collaboration 中选择所有项目并按group_id 在group_members 中为给定用户分组
这意味着当用户登录时,(s)他将看到所有(且仅)属于他所属的组的 collaboration 项目。
2.) 对于每个group_id,选择所有协作项。
这意味着当用户从上面的 1 中选择任何组 (group_id) 时,他将看到属于所选组 (group_id) 的所有 collaborationitems
约束:每个用户都必须是组成员。 userstable 用于提供用户的firstname和lastname。
这是我尝试了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;
感谢您的意见!
【问题讨论】:
-
-
我认为“我试过的”部分在 Markdown 中丢失了,但不,什么都没有(更新前是)。
-
-
"WHERE ... collaboration.is_comment IS NULL" -- 伙计,我真的很讨厌三态布尔值
-
WHERE ... collaboration.is_comment IS NULL 永远不会匹配任何内容,因为is_comment 设置为NOT NULL 并且没有OUTER JOINs(LEFT 或RIGHT)。你的意思是IS NOT NULL?
标签:
mysql
select