从三个表中选择 - mysql 和 php

Posted

技术标签:

【中文标题】从三个表中选择 - mysql 和 php【英文标题】:Select from three tables - mysql and php 【发布时间】:2012-10-29 04:58:17 【问题描述】:

我有以下三个表格,我希望从中获得以下选择: 1.) 从collaboration 中选择所有项目并按group_idgroup_members 中为给定用户分组 这意味着当用户登录时,(s)他将看到所有(且仅)属于他所属的组的 collaboration 项目。 2.) 对于每个group_id,选择所有协作项。 这意味着当用户从上面的 1 中选择任何组 (group_id) 时,他将看到属于所选组 (group_id) 的所有 collaborationitems

约束:每个用户都必须是组成员。 userstable 用于提供用户的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;

感谢您的意见!

【问题讨论】:

你的“我试过的”部分是空白的。 我认为“我试过的”部分在 Markdown 中丢失了,但不,什么都没有(更新前是)。 对不起!我已更新以显示我尝试过的选择之一。干杯! "WHERE ... collaboration.is_comment IS NULL" -- 伙计,我真的很讨厌三态布尔值 WHERE ... collaboration.is_comment IS NULL 永远不会匹配任何内容,因为is_comment 设置为NOT NULL 并且没有OUTER JOINs(LEFTRIGHT)。你的意思是IS NOT NULL 【参考方案1】:

以下选择确实提供了问题 1 的请求。但是,我知道查询不是最佳的,因为我确实选择了目前不需要的条目。例如使用 * 我只想从 collaboration 中选择 titlecontenttimestampgroup_id,以及从 usersfirstname、lastname br>

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

【讨论】:

以上是关于从三个表中选择 - mysql 和 php的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)

我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 PHP 插入到第三个表中

mySQL 从一个表中选择,该表在另一个表中不存在,并且不是第三个表中的子表

从php中的mysql表中选择一个字符串不显示输出

mysql php从2个表中选择字段,具有相同的字段名称[重复]

php mysql如何从2个表中选择我需要的[关闭]