Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL Join语句-im丢失_Php_Mysql_Sql - Fatal编程技术网

Php MYSQL Join语句-im丢失

Php MYSQL Join语句-im丢失,php,mysql,sql,Php,Mysql,Sql,好的,我需要从多个表中获取一些数据,所有这些表都有一个键 项目(关键字:id) 项目\用户(键:项目\ id,用户\ id) 用户(密钥:id) 基本上每个项目可以有N个用户。我需要获得每个项目中的所有用户的格式化响应 例如: projects = {[ 1: { 'title':'Project 1', 'users': [ 1: { id: 23, name:'john' },

好的,我需要从多个表中获取一些数据,所有这些表都有一个键

项目(关键字:id) 项目\用户(键:项目\ id,用户\ id) 用户(密钥:id)

基本上每个项目可以有N个用户。我需要获得每个项目中的所有用户的格式化响应

例如:

projects = {[

     1: {
          'title':'Project 1',
          'users': [
                1: { id: 23, name:'john' },
                2: { id: 55, name:'sally' }
          ]
     }

     2: {
          'title':'Project 2',
          'users': [
                1: { id: 41, name:'jeff' },
                2: { id: 55, name:'sally' }
          ]
     }

]}

另外,我知道我可以在PHP中使用多个MYSQL语句来实现这一点。这会更快,用PHP进行连接,还是让MYSQL更高效/快速地进行连接。

我还没有尝试过这一点,但它应该接近您想要的:

select p.title, u.name 
from  projects p inner join users u
  on p.id = u.id
order by p.title
您需要“连接”来获取数据。。但是使用PHP来格式化它

附言:
“项目”是一个表,“用户”是第二个表。。。“projects”表需要保存用户ID 23、55和41的“外键”。

MySql将无法以您想要的树状结构返回数据。您可以通过两种方式执行此操作:

  • 获取一个数据集中的所有项目以及第二个数据集中与这些项目关联的所有用户。您必须编写生成所需JSON对象的代码

  • 只需获取一个数据集,将项目的表与用户的表进行内部联接。您将在许多列上获得重复的信息,但您将在一条sql语句中获得所有信息。然后可以迭代结果集并生成所需的结构

  • 如果您需要有关内部联接的帮助,它将类似于:

    select p.title, u.id, u.name 
    from projects p 
    inner join project_users pu on pu.project_id=p.id 
    inner join users u on u.id=pu.user_id
    

    您可以使用以下语句获取所需的数据:

    SELECT `Projects`.*, `Users`.* FROM 
        `Projects` JOIN (
            `Projects_users` JOIN 
                `Users` 
                ON `Projects_users`.`user_id` = `Users`.`id`
            ) 
            ON `Projects`.`id` = `Projects_users`.`project_id` 
        ORDER BY `Projects`.`id`
    

    之后,您可以单次遍历生成的表并构建所需的数组。

    我认为这是不够的,因为projects:users关系是m:n,而不是代码假定的1:n。您是正确的。确实需要有三个表:projects(带有projectid和title)、users(带有userid和name)。。。和“项目成员”(映射“用户”和“项目”之间的m:n关系)。这很有效,谢谢。但是,使用PHP函数进行两个单独的调用是否更好?我相信,将尽可能多的计算量卸载到MySQL服务器会更有效,因为它可以更好地优化一个大查询,而不是发送多个查询。(但我可能错了)亲爱的,谢谢!我从一位同事那里得到了同样的回答。还有(最后一个问题)如何使数据恢复为每一行都是{TABLE}.{row},因为其中一些行正在覆盖其他行。再次感谢!您可以将结果集中的一些列重命名,例如选择
    Projects
    name
    作为
    projname
    ,…没问题,很高兴我能提供帮助。