2012-05-12 34 views
2

假设我有一张名为students的表格,其中包含所有学生的列表。每个学生可以将许多课程存储在另一个表中,由学生ID标识。是否有可能在mysql中执行此查询?

我想要做一个查询,它将从学生表中获取包含学生信息的行,并在一个查询中获取他所有的课程。我想输出是这样的:

Array 
(
    [0] => Array 
     (
      [id] => 5 
      [firstName] => Bob 
      [lastName] => Smith 
      [email] => .... 
      [courses] => Array 
       (
        [0] => Array 
         (
          [id] => 30 
          [name] => Test Course 
          [price] => 400 
         ) 

        [1] => Array 
         (
          [id] => 30 
          [name] => Test Course 2 
          [price] => 300 
         ) 

       ) 

     ) 

) 

让学生的信息,我会做这个查询:

SELECT * FROM students WHERE something ='something' 

要获得这些课程的学生,我会做这样的:

SELECT * FROM courses WHERE studentId = '5' 

是否有可能一次执行两个查询并获得类似于上述数组的输出,还是必须遍历每个学生并获取其课程,然后将其附加到数组?

+0

我想'group_concat'可能的帮助。链接:http://www.dougboude.com/blog/1/2009/12/A-SWEET-Little-MySQL-Function-GroupConcat.cfm – Strawberry

+0

你在寻找SQL语法还是为了进入你的数组格式? –

+0

http://stackoverflow.com/a/5378180/170365 – Strawberry

回答

1
$query = "select * from students inner join courses on studentID = '5' where something = 'something'"; 
$result = mysql_db_query ($dbname, $query, $link); 
$id = $row[0]; # corresponding to row in students database 
$firstName= $row[1]; # corresponding to row in students database 
$lastName = $row[2]; # corresponding to row in students database 
$email = $row[3]; # corresponding to row in students database 
while($row = mysql_fetch_array($result)) { 
    echo 'id: '.$row[id]; 
    echo '<br>'; 
    echo 'name: '.$row[name]; 
    echo '<br>'; 
    echo 'price: '.$row[price]; 
    echo '<br>'; 
} 
+0

是否有可能对studentId = students.id'做内部连接课程,而不是将学生代码硬编码为5?我想让所有的学生,而不是一次一个。 –

+0

@Click Yes只是用''取代'5'。$ studentId。''' – Rodney

+0

不,我一次只能给一个学生提供,如果我有100个学生,我将不得不运行这个查询100他们所有人的时间 –

1

您可以通过连接表一起做到这一点:

select s.*, c.* 
from students s join 
    courses c 
    on s.studentid = c.studentid 
where s.something = 'something' 

如果你想在一排学生信息,并在另一个过程中,那么它是不可能的。所有行必须具有相同的列。

+0

我想让课程信息成为学生排上的数组,那不可能呢? –

+0

这不会创建一个多维数组。 – Strawberry

+0

@Strawberry它不可能做一个多维数组,然后除了循环? –

1

基本上新代码将是:

$query = "select * from students"; 
$result = mysql_db_query ($dbname, $query, $link); 
while($row = mysql_fetch_array($result)) { 
    $id = $row[0]; # corresponding to row in students database 
    $firstName= $row[1]; # corresponding to row in students database 
    $lastName = $row[2]; # corresponding to row in students database 
    $email = $row[3]; # corresponding to row in students database 
    echo 'id: '.$id; 
    echo '<br>'; 
    echo 'firstName: '.$firstName; 
    echo ' '; 
    echo 'lastName: '.$lastName; 
    echo '<br>'; 
    echo 'email: '.$email; 
    echo '<br>'; 
    $query = "select * from courses where id = '".$id."'"; 
    $result2 = mysql_db_query ($dbname, $query, $link); 
    while($row2 = mysql_fetch_array($result2)) { 
    echo 'name: '.$row2[1]; # corresponding to row in courses database 
    echo '<br>'; 
    echo 'price: '.$row2[2]; # corresponding to row in courses database 
    echo '<br>'; 
    } 
} 
相关问题