我有两张桌子。
Table 1.
========
id
post
--------
Table 2.
========
id
post_id
thumbs_sum
--------查询如下所示:
SELECT DISTINCT(t2.id), t2.sum, t1.id
FROM table1 t
LEFT JOIN table2 t2 ON t2.post_id = t1.id
ORDER BY t2.sum DESC例如,我们有5个帖子(sum -拇指上下之和):
1. sum = 3
2. sum = 1
3. sum = 5
4. sum = null
5. sum = -2帖子编号4在表2中没有任何记录,这就是我的查询返回下一个记录的原因:
1. sum = 5
2. sum = 3
3. sum = 1
4. sum = -2
5. sum = null如果我没有能力改变数据库表的结构并在PHP中对结果进行排序,如何决定这个问题?
发布于 2012-06-15 17:43:23
我在试着弄清楚这里真正的问题是什么。“如何决定这个问题”有点深奥。
无论如何,我假设,这里的问题是,对于没有投票的帖子,我们有null值作为拇指总和。当我们对它们进行排序时,我们可能希望用零替换空值。
SELECT DISTINCT(t2.id), t2.sum, t1.id
FROM table1 t
LEFT JOIN table2 t2 ON t2.post_id = t1.id
ORDER BY IFNULL(t2.sum, 0) DESC发布于 2012-06-15 17:43:07
如果您想在排序中将NULL值转换为数字0,则必须像这样增强ORDER BY子句:
ORDER BY IFNULL(t2.sum, 0) DESC请记住,此方法可防止MySQL使用可能的索引。因此,对数千条记录进行排序可能会很慢。
发布于 2012-06-15 17:53:49
根据数据量的不同,select distinct可能需要更长的时间才能返回,您最好在可以的情况下使用"group by t2.id“,结果将是相同的,但会更快。另外,还可以对表进行索引以提高性能。
在回答你的问题时,我会使用
order by ifnull(t2.sum, 0) DESC您的另一个选择是在数据库表设计中将缺省值设置为零,这样这将永远不会成为问题;)
https://stackoverflow.com/questions/11048103
复制相似问题