2013-04-25 2 views
0

Я использую следующий запрос для фильтрации и оценки результатов, которые назначены определенным категориям, которые работают совершенно прямо сейчас. Однако, если я попытаюсь сделать еще одно соединение, чтобы иметь возможность учитывать совпадение тегов с результатом, я столкнулся с проблемой, когда возвращается много результатов, которые не относятся к 3 категориям.Несколько соединений mysql, вызывающих проблему с запросом

Вот рабочий запрос ...

 SELECT DISTINCT results.*, 
        ( 
         3*(MATCH(body) AGAINST('*' IN BOOLEAN MODE)) + 
         5*(MATCH(title) AGAINST('*' IN BOOLEAN MODE)) + 
         1*usefulness + 
         30*(MATCH(body) AGAINST('""' IN BOOLEAN MODE)) + 
         20*(MATCH(title) AGAINST('""' IN BOOLEAN MODE)) + 
         5*shares 
        ) AS score 
     FROM results 
     INNER JOIN categories c on results.ID = c.RESULT_ID 
     WHERE c.name in ('refinance', 'condo', 'usda') 
     AND (results.scope = 'all' OR results.scope = 'hi') 
     AND published = 1 

     GROUP BY results.ID 
     HAVING COUNT(c.c_ID) = 3 
     ORDER BY score DESC 
     LIMIT 8 OFFSET 0 

Добавление следующей строки ниже категорий результатов, это то, что мне дает неполадок

INNER JOIN tags ON results.id = tags.result_id 

Это как если следующая строка перестает работать, когда я добавляю 2-е звено

HAVING COUNT(c.c_ID) = 3 

Я в затруднении здесь, и любая помощь будет очень благодарна iated!

ответ

1

Ошибка count(), так как у вас есть несколько строк в новом соединении, соответствующих исходным данным. Count() подсчитывает ненулевые значения. Так что, если есть два матча за ид, то вы получите 6 строк - и подсчет 6.

Я думаю, что следующее будет решить вашу проблему:

having count(distinct c.c_id) = 3 
+0

Thankyou так много! Это сводило меня с ума –

Смежные вопросы