Query Union удаляет дубликаты - PullRequest
0 голосов
/ 01 марта 2019

У меня есть запрос на объединение, как показано ниже.Он возвращает дубликаты записей, когда поисковый запрос находится между заголовком и описанием.Как избежать дублирования записей из результатов поиска

    $SQL = "(SELECT * FROM {$this->blogs} WHERE LOWER(heading) LIKE '%" .strtolower($query) . "%' ) 
        UNION 
        (SELECT * FROM {$this->blogs} WHERE  LOWER(description) LIKE '%" . strtolower($query) ."%')";   
    $run = $this->db->query( $SQL );
    $this->db->last_query();

Поиск

(SELECT * FROM tbl_wonderblogs WHERE LOWER(heading) LIKE '%indian army amfc%' ) UNION (SELECT * FROM tbl_wonderblogs WHERE LOWER(description) LIKE '%indian army amfc%')

1 Ответ

0 голосов
/ 01 марта 2019

Вместо union вы можете просто поместить оба условия в один запрос:

SELECT * 
FROM {$this->blogs} 
WHERE (   LOWER(heading) LIKE '%" .strtolower($query) . "%' 
       OR LOWER(description) LIKE '%" . strtolower($query) ."%'
      )

Если вам нужно, чтобы совпадения заголовков были на первом месте, добавьте:

ORDER BY (LOWER(heading) LIKE '%" .strtolower($query) . "%') DESC

Тем не менее,убедитесь, что ваша таблица еще не содержит повторяющихся данных.Если это так, вам нужно выяснить причину и устранить ее, что лучше, чем добавление ключевого слова DISTINCT после SELECT.Это по своей природе удаляет дубликаты из вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...