2

ビューで結果を取得するために2つのクエリを使用しました。resultq1 の結果を取得するには foreach を使用しますが、resultq2 の結果を表示するにはどうすればよいですか。

resultq1 の各行について、resultq2 のレコード「reccount」を取得します。

//コントローラ

     //Query 1
     $q = $this->db->select(array(
                'spf.id as id' ,
                'spf.name',
                "if(u.username != '',u.username,spf.added_by) as added_by ",
                'spf.added_on'
              ))->from('sp_forum spf')->join('sp_users u', 'spf.added_by = u.id', 'left')->where($where)->order_by('spf.id desc')->limit(10, $page * 10)->get();

            $resultq1= $q->result_array();
            $data['resultq1'] = $resultq1;

            $resultq2 = array();
             $i=0;
            foreach($resultq1 as $rec)
             {
                      //query 2
                 $id = $rec['id'];
                 $q1 = $this->db->select("count('id') as reccount ")->from('sp_forum_topic spft')->where('spft.forumid',$id)->get();
                 $resultq2[$i] =  $q1->row_object();
                 $i++; 
               }

$this->load->view('forumview', $data, true);

//ファイルを閲覧する

<table width="100%">
      <tr>
        <td class="th"> Details</td>
        <td width="5%" class="th"> Answer</td>
        <td width="15%" class="th">Started by</td>
        <td  width="15%" class="th">Created on</td>
      </tr>
      <?php foreach($resultq1 as $row):?>
       <tr>
        <td><?php echo $row['name'] ;?></td>

         <td >---- </td> // here i want to use resultq2

         <td><?php echo $row['added_by'] ;?></td>
        <td ><?php echo $row['added_on'];?></td>
      </tr>
      <?php endforeach;?>
    </table>

resultq2 のビューでの配列出力。Resultq1 には 4 つの行があるため、resultq2 で 4 つの値を取得します。

Array ( [0] => stdClass Object ( [reccount] => 0 ) [1] => stdClass Object ( [reccount] => 0 ) [2] => stdClass Object ( [reccount] => 0 ) [3] => stdClass Object ( [reccount] => 2 ) ) 0002
4

4 に答える 4

4

$resultq2ビューにも渡す必要があります。

コントローラーで、ビューを呼び出す直前

$data['resultq2'] = $resultq2

ビューで使用できるようになり$resultq2ました。

PS - SQL クエリは、コントローラーではなく、モデル内にある必要があります。

于 2013-03-01T05:00:34.457 に答える
0

ビューをロードする前に、'$ data ['resultq2'] =$resultq2'と書くだけです。

$data['resultq2'] = $resultq2
$this->load->view('forumview', $data, true);

そして、$result2変数によってビューでそれを取得できます。

ビューファイルで実行するだけvar_dump($result2);で、$result2変数の完全なデータを取得できます。

そして、xbonezは正しいです。モデルにDBクエリを記述してください。コントローラーはログイン専用であり、(モデル、ビュー、ライブラリ、ヘルパーなど)間の調整を行います。

于 2013-03-01T05:09:19.240 に答える
0

これで修正されるはずです。

コントローラを変更します-コメントも参照してください

<?php
//Query 1

  $q = $this->db->select(array(
  'spf.id as id',
  'spf.name',
  "if(u.username != '',u.username,spf.added_by) as added_by ",
  'spf.added_on'
  ))->from('sp_forum spf')->join('sp_users u', 'spf.added_by = u.id', 'left')->where($where)->order_by('spf.id desc')->limit(10, $page * 10)->get();

  $resultq1 = $q->result_array();
  $data['resultq1'] = $resultq1;   

$resultq2 = array();
foreach ($resultq1 as $rec) {
    //query 2
    //echo $id = $rec['id']; //Test and See if all IDs echo out correctly
    $data["id"] = $id; //Add this for the ID
    $q1 = $this->db->select("count('id') as reccount, spft.forumid")->from('sp_forum_topic spft')->where('spft.forumid', $id)->get();
    $resultq2[$id] = $q1->result(); //Change this line
    $data["resultq2"][$id] = $resultq2[$id]; //Add this line
}

//echo "<pre>";
//$export = var_export($data, true);// Test the returned value...
//echo "</pre>";
$this->load->view('forumview', $data, true);
?>

あなたの見解では

<table width="100%">
    <tr>
        <td class="th"> Details</td>
        <td width="5%" class="th"> Answer</td>
        <td width="15%" class="th">Started by</td>
        <td  width="15%" class="th">Created on</td>
    </tr>
    <?php //foreach ($resultq1 as $row):  ?>
    <?php foreach ($data as $row): ?>
        <tr>
            <td><?php echo $row['name']; ?></td>
            <td>
                <?php
                //$resultq2 is now array
                //print_r($resultq2); //Do this so you can see the depth of the array

                foreach ($resultq2 as $counts) {
                    foreach ($counts as $count) { //The second foreach might be necessary - please test
                        echo $count->reccount; //This should print out the count result
                        //echo "<br />";
                    }
                }
                ?>
            </td>
            <td><?php echo $row['added_by']; ?></td>
            <td ><?php echo $row['added_on']; ?></td>
            <td >

            </td>
        </tr>
        <?php
    endforeach;
    exit;
    ?>
</table>

私はそれをテストする時間がありませんでしたが、それはうまくいくはずです。問題があれば教えてください:

于 2013-03-01T05:26:39.903 に答える
0

2 番目のクエリを少し最適化しましたが、ロジックはほとんど同じです。

$q = $this->db->select(array(
    'spf.id as id' ,
    'spf.name',
    "if(u.username != '',u.username,spf.added_by) as added_by ",
    'spf.added_on'
    ))->from('sp_forum spf')->join('sp_users u', 'spf.added_by = u.id', 'left')->where($where)->order_by('spf.id desc')->limit(10, $page * 10)->get();

    $resultq1= $q->result_array();
    $data['resultq1'] = $resultq1;
    $ids = array();
    foreach($resultq1 as $result)
        $ids[] = $result['id'];

     $resultq2 = $this->db->select("count('id') as reccount ")->from('sp_forum_topic spft')->where_in('spft.forumid',$ids)->get();

    foreach( $resultq2->result_array() as $res )
        $newArr[$res['forumid']] = $res;

    $data['resultq2'] = $newArr;

resultq2 が元の id でインデックス付けされた後、resultq1 ループからの id を使用して正しいデータを表示するのは簡単です

<table width="100%">
      <tr>
        <td class="th"> Details</td>
        <td width="5%" class="th"> Answer</td>
        <td width="15%" class="th">Started by</td>
        <td  width="15%" class="th">Created on</td>
      </tr>
      <?php foreach($resultq1 as $row):?>
       <tr>
        <td><?php echo $row['name'] ;?></td>

         <td >
            <?php

                print_r( $resultq2[$row['id']]);

            ?>
        </td> // here i want to use resultq2

         <td><?php echo $row['added_by'] ;?></td>
        <td ><?php echo $row['added_on'];?></td>
      </tr>
      <?php endforeach;?>
    </table>
于 2013-03-01T05:18:47.460 に答える