правое внешнее соединение mySQL - PullRequest
0 голосов
/ 30 июля 2011

Я новичок в SQL и пытаюсь создать запрос:

$result = mysql_query("SELECT COUNT(*) AS s_count FROM solution RIGHT OUTER JOIN 
ON offer.oid = solution.oid ". "WHERE offer.is_solved = 0  ORDER BY offer.creation_time 
DESC LIMIT $interval_begin, $interval_end");

Предполагается, что запрос является живым товаром в магазине, подобном окружению: ему необходимо подсчитать все предложения, которые не были решены, и затем перечислить их в течение определенного интервала, чтобы отразить определенную страницу в списке. например, если существует 25 предложений на возраст, страница 2 будет 26-50.

Может кто-нибудь определить, почему вывод равен 0? Все столбцы / таблицы существуют и содержат тестовые значения.

Ответы [ 3 ]

1 голос
/ 30 июля 2011

Разве запрос не должен быть похож на

mysql_query("SELECT COUNT(*) AS s_count FROM solution RIGHT OUTER JOIN  offer ON offer.oid = solution.oid WHERE offer.is_solved = 0  ORDER BY offer.creation_time  DESC LIMIT".$interval_begin.",".$interval_end); 
0 голосов
/ 30 июля 2011

Зачем вам нужна таблица решений в вашем запросе?Из вашего текста выглядит, что

mysql_query("SELECT COUNT(*) FROM offer offer WHERE offer.is_solved = 0  ORDER BY offer.creation_time  DESC LIMIT".$interval_begin.",".$interval_end);

будет достаточно.

«Нам нужно знать точное количество решений для каждого« предложения », а не только то, есть ли какое-либо решение.совсем."- В таком случае ваш исходный SQL был неверным, он просто считал заказы.Вам нужно что-то вроде

mysql_query("SELECT offer.oid, COUNT(solution.oid) FROM offer offer LEFT JOIN ON offer.oid = solution.oid WHERE offer.is_solved = 0 GROUP BY offer.oid ORDER BY offer.creation_time  DESC LIMIT".$interval_begin.",".$interval_end);
0 голосов
/ 30 июля 2011

Рассматривая ваш вопрос и запрос, я думаю, что наиболее очевидные причины, по которым ваш запрос всегда возвращает 0, могут быть:

  1. В таблице offer нет is_solved = 0 для любой из его записей.В результате условие WHERE offer.is_solved = 0 не имеет соответствующих записей.Не могли бы вы подтвердить это для своих данных?

  2. В таблице offer нет данных, и, следовательно, ПРАВОЕ СОЕДИНЕНИЕ не дает результатов.Но, как вы упомянули в одном из ваших комментариев к ответу Рахула, в offer есть 3000 записей, я думаю, эта причина маловероятна.

Ага, может быть и другая причина: Вы уверены, что лимит и смещение, отмеченные $interval_begin и $interval_end, установлены правильно?Возможно, если они оба установлены в 0, запрос всегда будет возвращать 0. Можете ли вы попробовать выполнить «echo / print» вашего запроса и посмотреть, как он выглядит точно?

Поскольку я не понимаю вашегосхема, это только предложение, я думаю, что если у вас есть столбец offer.is_solved, вам не нужно ПРАВИЛЬНОЕ СОЕДИНЕНИЕ с solution.Следующий запрос должен работать одинаково хорошо, не так ли?

SELECT COUNT(*) AS `s_count`
FROM `offer`
WHERE `offer`.`is_solved` = 0
ORDER BY `offer`.`creation_time`
DESC LIMIT $interval_begin, $interval_end;

Надеюсь, это поможет!

...