MYSQL加入声明 - 我输了

时间:2011-11-11 20:01:25

标签: php mysql sql

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

项目(关键字:id) Projects_users(key:project_id,user_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更有效/更快地执行此操作。

3 个答案:

答案 0 :(得分:0)

我没试过这个,但它应该接近你想要的东西:

select p.title, u.name 
from  projects p inner join users u
  on p.id = u.id
order by p.title

您需要“join”来获取数据..但使用PHP格式化它。

PS: “projects”是一个表,“users”是第二个表......“projects”表需要为用户ID 23,55和41保存“外键”。

答案 1 :(得分:0)

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

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

  2. 只需获取一个数据集,即使用用户表执行项目表的内连接。您将获得有关许多列的重复信息,但您将在一个sql语句中获得所有内容。然后,您可以遍历结果集并生成所需的结构。

  3. 如果您需要内部联接的帮助,它将类似于:

    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
    

答案 2 :(得分:0)

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

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`

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