2011-12-20 14 views
-2

私は次のようにSQL文を持っている:私は結果を表示する際LEFT JOINと重複する結果

SELECT s.sp_id,s.synopsis,s.logline,s.user_id,s.bin_status,s.sp_order,s.sp_down_count,s.sp_name, 
      `users`.firstname as `firstname`,`users`.lastname as `lastname`,s.status, 
      `users`.email as `email`,`users`.phone as `phone`,`users`.address1 as `address1`, 
      `users`.address2 as `address2`,`users`.`r_group`, view_coverages.grade,coverages.comments 

    FROM s 
    LEFT JOIN `users` ON `users`.user_id=s.user_id 
    LEFT JOIN view_coverages ON view_coverages.sp_id=s.sp_id 
    LEFT JOIN `coverages` ON `coverages`.sp_id=s.sp_id 

    WHERE $email_filter lower(s.synopsis) like '%$search_word_fix%' 
    OR lower(s.sp_name) like '%$search_word_fix%' 
    OR lower(s.logline) like '%$search_word_fix%' 
    OR lower(coverages.comments) like '% $search_word_fix %' 
    ORDER BY view_coverages.grade DESC 

私は重複の多くを得ます。 s.sp_nameが重複していない検索結果を表示したいとします。

+0

はあなたの結果になって重複を取得しています。 _find_するためには(これを修正することができます)、サンプルデータと結果が必要ですが、おそらく達成しようとしているものがあります... –

答えて

2

あなたは2つのオプションがあります。

  1. はあなたSELECTSELECT DISTINCTにを変えるだけのユニークな、非重複の結果を選択します。
  2. GROUP BY s.sp_nameただし、選択している他のすべてのフィールドで集計関数を実行する必要があります。

人の名前、住所、電話番号などを平均したり合計したりすることはできないと確信しているので、おそらくオプション1(SELECT DISTINCT)を試してください。重複していない行に一意でないフィールドがある場合は、一意のフィールドを除くすべてのフィールドがGROUP BYになります。残りの一意のフィールドに集計関数(SUMAVGなど)を使用します。

+0

DISTINCTを選択して重複を表示しています – cppit

+0

ゼロ行が返されましたか?何も変更されていない場合、重複する行にはどのフィールドが重複しないのですか? –

+0

まだ重複を表示していません。 SELECT DISTINCT s.sp_id、s.synopsis、s.logline、s.user_id、s.bin_status、s.sp_order、s.sp_down_count、s.sp_nameなど... – cppit

1

のTyこの:どこかにあなたがユニークに参加していないデータを持っているので、

SELECT s.sp_id,s.synopsis,s.logline,s.user_id,s.bin_status,s.sp_order,s.sp_down_count,s.sp_name, 
      `users`.firstname as `firstname`,`users`.lastname as `lastname`,s.status, 
      `users`.email as `email`,`users`.phone as `phone`,`users`.address1 as `address1`, 
      `users`.address2 as `address2`,`users`.`r_group`, view_coverages.grade,coverages.comments 

    FROM s 
    LEFT JOIN `users` ON `users`.user_id=s.user_id 
    LEFT JOIN view_coverages ON view_coverages.sp_id=s.sp_id 
    LEFT JOIN `coverages` ON `coverages`.sp_id=s.sp_id 

    WHERE $email_filter lower(s.synopsis) like '%$search_word_fix%' 
    OR lower(s.sp_name) like '%$search_word_fix%' 
    OR lower(s.logline) like '%$search_word_fix%' 
    OR lower(coverages.comments) like '% $search_word_fix %' 
    ADD --->  group by s.sp_name 
    ORDER BY view_coverages.grade DESC