从三个表中选择 - mysql 和 php
Posted
技术标签:
【中文标题】从三个表中选择 - mysql 和 php【英文标题】:Select from three tables - mysql and php 【发布时间】:2012-10-29 04:58:17 【问题描述】:我有以下三个表格,我希望从中获得以下选择:
1.) 从collaboration
中选择所有项目并按group_id
在group_members
中为给定用户分组
这意味着当用户登录时,(s)他将看到所有(且仅)属于他所属的组的 collaboration
项目。
2.) 对于每个group_id
,选择所有协作项。
这意味着当用户从上面的 1 中选择任何组 (group_id
) 时,他将看到属于所选组 (group_id
) 的所有 collaboration
items
约束:每个用户都必须是组成员。 users
table 用于提供用户的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 JOIN
s(LEFT
或RIGHT
)。你的意思是IS NOT NULL
?
【参考方案1】:
以下选择确实提供了问题 1 的请求。但是,我知道查询不是最佳的,因为我确实选择了目前不需要的条目。例如使用 *
我只想从 collaboration 中选择 title
、content
、timestamp
、group_id
,以及从 usersfirstname、lastname
br>
【讨论】:
以上是关于从三个表中选择 - mysql 和 php的主要内容,如果未能解决你的问题,请参考以下文章
如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)
我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 PHP 插入到第三个表中
mySQL 从一个表中选择,该表在另一个表中不存在,并且不是第三个表中的子表