1

データベース内の工場を検索するための検索フォームがあります。私の工場テーブルには「郵便番号」というフィールドがあり、初めてサイトにアクセスしたときに郵便番号を入力する必要があります。これは Cookie に保存されるため、再度変更する必要はありません。

ここで、検索用語と Cookie の「郵便番号」を使用して工場を検索したいと考えています。

ここに私の検索フォームがありますhttp://kees.een-site-bouwen.nl/

だから、このようなもの:

<form action="home/searchresults" method="post">
<input type="search" placeholder="search..." name="search">
<input type="search" value="<?= $this->input->cookie('postcode')?>">
</form>

そして私のコントローラーでは次のようなものです:

$match = $this->input->post('search');
$match2 = $this->input->cookie('postcode');

$data['query'] = $this->bedrijven_model->get_search($match, $match2);
$this->load->view('views/header');
$this->load->view('views/searchresults', $data);
$this->load->view('views/footer');

私のモデルでは:

function get_search($match)
{
    $this->db->like('Bedrijfsnaam', $match);
    $this->db->or_like('Postcode', $match);
    $this->db->or_like('Plaats', $match);
    $this->db->or_like('Telefoonnummer', $match);
    $this->db->or_like('Email', $match);
    $this->db->or_like('Website', $match);
    $this->db->or_like('Profiel', $match);
    $this->db->or_like('Adres', $match);
    $this->db->or_like('Categorie', $match);

    $this->db->join('bedrijven', 'bedrijfcategorieen.idbedrijven = bedrijven.idbedrijven');
    $this->db->join('categorieen', 'bedrijfcategorieen.idcategorieen = categorieen.idcategorieen');
    $this->db->group_by('bedrijfcategorieen.idbedrijven', 'bedrijfcategorieen.idcategorieen');

    $query = $this->db->get('bedrijfcategorieen');

    return $query->result();
   }

しかし、これはうまくいきません。ここで同様の質問をしました:コントローラー関数でのクエリのオーバーライドを防ぐ - codeigniter

しかし、私のために働いた答えはありません。

4

2 に答える 2

1

に 2 つのパラメーターを指定します$this->bedrijven_model->get_search($match, $match2);が、関数自体には 1 つだけを指定しますget_search($match)。そう:

function get_search($match, $match2 = false)
{
    $this->db->like('Bedrijfsnaam', $match);
    $this->db->or_like('Postcode', $match);
    //etc
    if($match2){
        $this->db->where('Postcode', $match2);
    }
}

...動作するはずですか?

更新しました

チャットでは、少し複雑なクエリであるため、アクティブ レコードを使用しない方がよいことが明らかになりました。代わりに、この生の SQL を提供しました。

$query = "SELECT * FROM (`bedrijfcategorieen`)
JOIN `bedrijven` ON `bedrijfcategorieen`.`idbedrijven` = `bedrijven`.`idbedrijven`
JOIN `categorieen` ON `bedrijfcategorieen`.`idcategorieen` = `categorieen`.`idcategorieen`
WHERE (`Bedrijfsnaam` LIKE '%".$this->input->post('search')."%'
OR `Plaats` LIKE '%".$this->input->post('search')."%'
OR `Telefoonnummer` LIKE '%".$this->input->post('search')."%'
OR `Email` LIKE '%".$this->input->post('search')."%'
OR `Website` LIKE '%".$this->input->post('search')."%'
OR `Profiel` LIKE '%".$this->input->post('search')."%'
OR `Adres` LIKE '%".$this->input->post('search')."%'
OR `Categorie` LIKE '%".$this->input->post('search')."%')
AND (`Postcode` = `".$this->input->post('cookie')."`)
GROUP BY `bedrijfcategorieen`.`idbedrijven`";

... このビットを使用して結果セットを取得します。

$result = $this->db->query($query);

$this->input->post('search')andは、上記の sqlでandに$this->input->post('cookie')置き換えることができます。また、ユーザーが入力フィールドから Cookie を消去できるため、Cookie のデフォルトを設定することも提案しました。何かのようなもの$match$match2

$match2 = $this->input->post('cookie') ? $this->input->post('cookie') : 'default';
于 2013-04-15T12:29:09.397 に答える
0

あなたが正しいと理解したら、like ステートメントの後に別の where ステートメントを追加してみませんか。このようなもの:

function get_search($match,$postcode)
{
    $this->db->like('Bedrijfsnaam', $match);
    $this->db->or_like('Postcode', $match);
    $this->db->or_like('Plaats', $match);
    $this->db->or_like('Telefoonnummer', $match);
    $this->db->or_like('Email', $match);
    $this->db->or_like('Website', $match);
    $this->db->or_like('Profiel', $match);
    $this->db->or_like('Adres', $match);
    $this->db->or_like('Categorie', $match);

$this->db->where("郵便番号",$郵便番号);

    $this->db->join('bedrijven', 'bedrijfcategorieen.idbedrijven = bedrijven.idbedrijven');
    $this->db->join('categorieen', 'bedrijfcategorieen.idcategorieen = categorieen.idcategorieen');
    $this->db->group_by('bedrijfcategorieen.idbedrijven', 'bedrijfcategorieen.idcategorieen');

    $query = $this->db->get('bedrijfcategorieen');

    return $query->result();
   }

アップデート:

あなたのクッキーは設定されていますか?値を正しく取得できますか?この次のスクリプトをコントローラーとして試してください。これは、Cookie の値を画面に表示する必要があります。おそらく、Cookie 値のフェッチですでに問題が発生している可能性があります。

    $match = $this->input->post('search');
    $match2 = $this->input->cookie('postcode');
echo "cookie value = ".$match2;

    $data['query'] = $this->bedrijven_model->get_search($match, $match2);
    $this->load->view('views/header');
    $this->load->view('views/searchresults', $data);
    $this->load->view('views/footer');
于 2013-04-15T12:27:28.877 に答える