1

私はこのコードを持っています:

function search($terms){
    $query      = $this->db->get_where('products',"name LIKE '%$terms%' OR description LIKE '%$terms%'");
    $product    = $query->result_array();

    foreach($product as $p):            
        $query2 = $this->db->get_where('categories', array('cat_id' => $p['prod_category']));
        $category   = $query2->row_array();

        $product['category'] = $category['cat_link'];
    endforeach;

    return $product;
}

私の検索機能で。次のようなものが返されます。

Array(
[0] => Array(
   [prod_id] => 5
   [prod_name] => Product
   [prod_category] => 1
)

しかし、私が求めているのは次のとおりです。

Array(
[0] => Array(
   [prod_id] => 5
   [prod_name] => Product
   [prod_category] => Category1
)

IDが1の私のカテゴリの名前から。これは私の「categories」テーブルにあります。foreachループはこれを達成するための正しい方法ではありませんが、何ですか?

4

2 に答える 2

1

以下の方法を使用できます。

私はあなたがすでにあなたのライブラリをロードしたと仮定しています

コントローラ

function search()
{
$data['query'] = $this->Books_model->get_search();
$this->load->view(‘books’, $data);
}

モデル

function get_search()
{
$match = $this->input->post(‘search’);
$this->db->like(‘bookname’,$match);
$this->db->or_like(‘author’,$match);
$this->db->or_like(‘characters’,$match);
$this->db->or_like(‘synopsis’,$match);
$query = $this->db->get(‘books’);
return $query->result();
}

ビュー

<?=form_open(‘books/search’);?>
<?php $search = array(‘name’=>’search’,'id’=>’search’,'value’=>”,);?>
<?=form_input($search);?><input type=submit value=’Search’ /></p>
<?=form_close();?>

結果は、HTMLテーブルを使用して表示できます

<table>
<tr><th>ID</th><th>Book</th><th>Author</th><th>Published</th><th>Price</th></tr>
<?php foreach($query as $item):?>
<tr>
<td><?= $item->id ?></td>
<td><?= $item->bookname ?></td>
<td><?= $item->author ?></td>
<td><?= $item->datepublished ?></td>
<td><?= $item->price ?></td>
</tr>
<?php endforeach;?>
</table>

これは私が使用しているものであり、CodeIgniterで検索機能を作成するのに役立つことを願っています。

于 2012-11-12T11:00:07.360 に答える
1

データベースにテーブルの結合を処理させることで、検索ロジックを簡素化できます。

function search($terms){

    $this->db->select('prod_id, prod_name, cat_name');
    $this->db->from('products');
    $this->db->join('categories', 'cat_id = prod_category', 'inner');
    $this->db->like('name', $terms);
    $this->db->or_like('description', $terms);

    $query = $this->db->get();
    return $query->result_array();
}

これは、カテゴリ名の列が という名前であると仮定していますcat_name。結果は次のようになります。

Array(
[0] => Array(
   [prod_id] => 5
   [prod_name] => Product
   [cat_name] => Category1
)

お役に立てれば!

于 2012-11-12T12:58:05.890 に答える