我是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的原因吗?所有列/表都存在,并且确实包含测试值。
答案 0 :(得分:1)
查询不应该像
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);
答案 1 :(得分:0)
查看您的问题和您的查询,我认为您的查询始终返回0的最明显原因可能是:
表offer
的任何记录都没有is_solved
= 0。因此,WHERE条件offer.is_solved = 0
没有匹配的条目。您能否确认一下这些数据?
表offer
没有数据,因此RIGHT JOIN不会产生任何结果。但正如你在Rahul的回答中提到的那样,offer
中有3000个条目,我想这个原因不太可能。
啊哈,也有另一个原因:你确定$interval_begin
和$interval_end
标记的限制和偏移是否正确设置?也许如果它们都设置为0,查询将始终返回0.您是否可以尝试对查询执行“回显/打印”并查看它的外观如何?
由于我不了解您的架构,这只是一个建议,我认为如果您有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;
希望它有所帮助!
答案 2 :(得分:0)
您在查询中需要什么样的解决方案表?从你的文字看起来像
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);