Вопрос:
У меня есть инструкция 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 не дублируется.
Лучший ответ:
У вас есть два варианта:
- Выберите только уникальные, не дублированные результаты, изменив SELECT на SELECT DISTINCT.
- GROUP BY s.sp_name но вам нужно будет выполнить агрегатную функцию для всех остальных полей, которые вы выбираете.
Поскольку я уверен, что вы не можете усреднить или суммировать имя, адрес, номер телефона и т.д., Вы должны просто попробовать вариант 1 (SELECT DISTINCT). Если у вас есть не уникальное поле в вашей дублированной строке, вам нужно будет GROUP BY каждое поле, кроме уникального поля; используйте совокупную функцию (т.е. SUM, AVG и т.д.) на оставшемся уникальном поле.
Ответ №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