2012-02-11 15 views
0

私はdbと練習するのが初めてです。私は、社員、部署、職位という3つのテーブルを持つ "Company"という単純なデータベースを作成しました。従業員表のフィールドは、id、name、dept_id、pos_idです。従業員と部門を関連付けるために外部キーを使用しています。PHP、関連するテーブルのクエリ結果を表示するのに役立つ

私はこのような情報を表示したいと思います:

Department 1 
Directors: Kevin, Jane, Tom 
Managers: Joe, Fred, Mary 

Deparment 2 
Directors: Bill, Elizabeth, Frank 
Managers: Jennifer, Brian, Nicole 

私はそれらに関連する位置と部門と全従業員を返すために、私は表示する正しいPHPを把握することはできません、JOINステートメントを使用それらは上記の例のようです。私はJOINSを使用してはいけませんか?

SQL:

$sql = "SELECT employee.name, position.pos_name, department.dept_name 
     FROM employee 
     INNER JOIN position 
     ON employee.pos_id = position.id 
     INNER JOIN department 
     ON employee.dept_id = department.id"; 

    $result = $dbconn->query($sql); 

すべてのヘルプは、素晴らしいことだ

おかげで、すべての

答えて

2

$結果とはそれはdbリソースですか、またはquery()メソッドは配列を返しますか?

$ resultがquery()メソッドによって返される連想配列であると仮定すると、それを反復して条件を使用して必要な情報を取得できるはずです。

foreach($result as $row) 
{ 
    switch($row['department.dept_name']) { 
     case "department 1" 
      if($row['position.pos_name']) == 'Director') { 
       $department1['directors'][] = $row['employee.name']; 
      } else if($row['position.pos_name'] == 'Manager') { 
       $department1['managers'][] = $row['employee.name']; 
      } 
     break; 

     case "department 2" 
      //repeat for each department 

    } 
} 

これはあなたに各部門の連想配列を与えるだろう、あなたはそれらを反復して、記述されたフォーマットでHTMLをエコーすることができます。

while($row = mysql_fetch_assoc($result)) 
{ 
    $data[] = $row; 
} 

と、代わりに$のデータは、foreach文の結果$を使用します。$結果はDBリソースではなく配列の場合

、その後、あなたのような何かをする必要があります。

-2
while ($row = mysql_fetch_array($result)){ 
echo $row['name of column here']; // repeat this for all columns. 
} 
+0

-1:これは望ましい出力をどのくらい作成しますか? –

+0

希望する出力は作成されませんが、kdubは方向を指します。 – Cjueden

2

まず:今のように必要な

$sql = "SELECT employee.name, position.pos_name, department.dept_name 
      FROM employee 
      INNER JOIN position 
      ON employee.pos_id = position.id 
      INNER JOIN department 
      ON employee.dept_id = department.id 
      ORDER BY dept_name,pos_name"; 

    $result = $dbconn->query($sql); 

をソートするために、あなたのSQLを適応させます二重のグループ変更を行うループ:

$dname=false; 

while (true) { 
    $row=mysql_fetch_row($result); 

    //done! 
    if (!$row) break; 

    if (!($row[2]===$dname)) { 
    //Group change #1: We have a new department 
    $dname=$row[2]; 
    echo "<br>\nDepartment: $dname"; 
    $pname=false; 
    } 

    if (!($row[1]===$pname)) { 
    //Group change #2: We have a new Position 
    $pname=$row[1]; 
    echo "<br>\n$dname: "; 
    $separator=''; 
    } 

    echo $separator.$row[0]; 
    $separator=', '; 
} 
2

私はそれをテストすることはできませんし、私は条件がJOINまたは後HAVING中である必要がありすぎるわからないんだけど、これをテストしてみてください:

$sql = " 
      SELECT department.dept_name,department.id, 
      GROUP_CONCAT(DISTINCT directors.name SEPARATOR ', '), 
      GROUP_CONCAT(DISTINCT managers.name SEPARATOR ', ') 
      FROM department 
       JOIN employee AS directors 
        ON directors.pos_id = x //director position 
        AND directors.dept_id = department.id 
       JOIN employee AS managers 
        ON managers.pos_id = x //managers position 
        AND managers.dept_id = department.id 
      GROUP BY department.id" 
$result = $dbconn->query($sql); 
print_r($result->fetchAll()); 

はEDIT:申し訳ありませんが、私の要求を

関連する問題