sql >> データベース >  >> RDS >> Mysql

PDOを使用して2つのMySQLテーブルから結合された結果を出力するにはどうすればよいですか

    GROUP_CONCATを使用して、参加者を組み合わせることができます。

    SELECT 
        conf.conference_sid,
        date_created, 
        TIMEDIFF(date_completed, date_created) AS duration,
        conf.RecordURL, 
        conf.PIN,
        GROUP_CONCAT(pid SEPARATOR ",") AS pid,
        GROUP_CONCAT(call_sid SEPARATOR ",") AS call_sid,
        GROUP_CONCAT(call_from SEPARATOR ",") AS call_from,
        GROUP_CONCAT(name_recording SEPARATOR ",") AS name_recording
    FROM 
        conference conf
    LEFT OUTER JOIN 
        participants p ON p.conference_sid = conf.conference_sid
    WHERE 
        conf.PIN = 123
    GROUP BY conf.conference_sid
    

    SQLFIDDLE を参照してください TIMEDIFF

    これで、アプリケーションロジックは

    になります。
    <?php
      $pin = 123;
      $db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
      $stmt = $db->prepare(
        'SELECT 
            conf.conference_sid,
            date_created, 
            timediff(date_completed, date_created) AS duration,
            conf.RecordURL, 
            conf.PIN,
            GROUP_CONCAT(pid SEPARATOR ",") AS pid,
            GROUP_CONCAT(call_sid SEPARATOR ",") AS call_sid,
            GROUP_CONCAT(call_from SEPARATOR ",") AS call_from,
            GROUP_CONCAT(name_recording SEPARATOR ",") AS name_recording
        FROM 
          conference conf
        LEFT OUTER JOIN 
          participants p ON p.conference_sid = conf.conference_sid
        WHERE 
          conf.PIN = :pin
        GROUP BY conf.conference_sid');
      $stmt->bindParam(':pin', $pin);
    ?>
    <table border="1">
    <thead>
      <th>Date</th>
      <th>Duration</th>
      <th>Participants</th>
      <th>Recording</th>
    </thead>
    
    <tbody>
    <?php
      $stmt->execute();
      while ($row = $stmt->fetch()) {
    ?>
        <tr>
          <td><?php echo $row['date_created']; ?></td>
          <td><?php echo $row['duration']; ?></td>
          <td>
            <table border="1">
              <thead>
                <th>call_sid</th>
                <th>call_from</th>
                <th>name_recording</th>
              </thead>
              <tbody>
    
    <?php
        $length = count(explode(',', $row['pid']));
        $call_sid = explode(',', $row['call_sid']);
        $call_from = explode(',', $row['call_from']);
        $name_recording = explode(',', $row['name_recording']);
        for ($i=0; $i < $length; $i++) { 
          ?>
            <tr>
              <td> <?php echo $call_sid[$i]; ?> </td>
              <td> <?php echo $call_from[$i]; ?></td>
              <td> <?php echo $name_recording[$i]; ?> </td>
            <tr>
    <?php
        }
    ?>
            </tbody>
            </table>
          </td>
          <td>
            <a href="<?php echo $row['RecordURL']; ?>">
            Call recording</a>
          </td>
        </tr>
    <?php
      }
    ?>
    </tbody>
    

    pid、call_sid、call_from、およびname_recordingの値がコンマ(、)で区切られた結果セットを取得します。 explode を使用して、この文字列を配列に変換できます。 。

    array explode ( string $delimiter , string $string [, int $limit ] )
    


    1. Oracle SQL:インラインビューに存在する場合のSYS_GUID()の動作を理解していますか?

    2. MySQLサーバーでの再接続が終了しました

    3. MicrosoftAzureでのPostgreSQLのフェイルオーバーとフェイルバック

    4. JavaをMySQLデータベースに接続します