LEFT JOIN и дублировать результаты - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть SQL-оператор следующим образом:

    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 не является дубликатом.

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

У вас есть два варианта:

  1. Выберите только уникальные, не повторяющиеся результаты, изменив значение SELECT на SELECT DISTINCT.
  2. GROUP BY s.sp_name, но вам потребуетсячтобы выполнить статистическую функцию для всех других полей, которые вы выбираете.

Поскольку я уверен, что вы не можете усреднить или суммировать имя, адрес, номер телефона и т. д. человека, вам, вероятно, следуетпросто попробуйте вариант 1 (SELECT DISTINCT).Если у вас есть неуникальное поле в дублирующейся строке, вам нужно GROUP BY каждое поле, кроме уникального поля;используйте статистическую функцию (т. е. SUM, AVG и т. д.) для оставшихся уникальных полей.

1 голос
/ 20 декабря 2011

Ты это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...