2011-08-02 25 views
1

「users」、「products」、「product_types」という3つのテーブルがあります。 「ユーザー」テーブルには、サイトのユーザーに関するすべての通常のデータ(id列を含む)が格納されます。 「製品」表には製品のproduct_id、追加したユーザーのuser_id、およびproduct_typeがリストされています。 'product_types'テーブルにはid列( 'products'テーブルのproduct_type int値に対応)とvarchar name列があります。CodeIgniterで%likeとJOINを併用する

「ユーザー」テーブルで%like%の検索を実行して、ユーザーが商品タイプを検索すると、検索した商品タイプに一致する商品を持つすべてのユーザーを表示するようにします。 - それは結果なしで戻ってくる他の回

$string = urldecode($string); 
$this->db->select('users.*'); 
$this->db->from('users'); 
$this->db->like('users.company_name',$string,'both'); 
$this->db->or_like('users.address_1',$string,'both'); 
$this->db->or_like('users.city',$string,'both'); 
$this->db->or_like('users.contact',$string,'both'); 
$this->db->or_like('product_types.name',$string,'both'); 
$this->db->join('products','users.id = products.client_id'); 
$this->db->join('product_types','products.product_type = product_types.id'); 
$this->db->distinct(); 
$users = $this->db->get(); 
foreach($users->result() as $user){ 
    // search result 
} 

私は、foreach文にこれを養う...しかし、それは最初の行だけの時間のほとんどを見せている:ここに私は現在、私のCodeIgniterのモデルに使用してんですよ。誰が私が間違っているのか教えていただけますか?

+2

実行されたSQLクエリを表示する '$ this-> db-> last_query();を表示してください。 – Sukumar

答えて

2

私はあなたが複数のクエリを作っている理由を理解しない、それが唯一のクエリで実現することができる

SELECT a.*,b.*,C.* FROM users a LEFT JOIN products b ON b.user_id = a.id LEFT JOIN product_types c ON b.product_type = c.id WHERE a.company_name LIKE '%$string%' OR a.address_1 LIKE '%$string%' OR a.city LIKE '%$string%' a.contact LIKE '%$string%' b.name LIKE '%$string%' 

これはあなたにそれを実行しようとすると、そこに製品の種類とあなたのユーザーのすべての製品を提供しますそれを実際に見るためにdb。 foreach文を使用して結果を取得する

+0

私はこれが動作するように管理してきました - ありがとう – hohner

1

私がクエリをデバッグするために行うことは、最初にトップクエリから開始し、次に結果を確認することです。それから私はそれに1つのステートメントを追加し、結果をもう一度見ます。

だからあなたの場合のために、あなたは、単純なケースで始めることができます。その結果で

$this->db->select('users.*'); 
$this->db->from('users'); 

ルック、その後、別のステートメントを追加します。

$this->db->select('users.*'); 
$this->db->from('users'); 
$this->db->like('users.company_name',$string,'both'); 

あなたが最終的に全体を形成するまで、これを行いますクエリ。

どのようなステートメントがあなたの他の期待される結果をフィルタリングしているかを発見する途中です。これは後で行うこともできます。

+0

私はforeachループとresult()を使用しています。私はちょうどこれを強調するために私の質問を編集しました – hohner

関連する問題