2010-04-04 48 views
1

由於將LEFT JOIN添加到下面的查詢中,count(*)返回了一些奇怪的值,它似乎已將查詢中返回的總行添加到'level ':添加LEFT JOIN後破碎的計數(*)

SELECT `n`.*, exp_channel_titles.*, round((`n`.`rgt` - `n`.`lft` - 1)/2, 0) AS childs, 
count(*) - 1 + (`n`.`lft` > 1) + 1 AS level, 
((min(`p`.`rgt`) - `n`.`rgt` - (`n`.`lft` > 1))/2) > 0 AS lower, 
(((`n`.`lft` - max(`p`.`lft`) > 1))) AS upper 
FROM `exp_node_tree_6` `n` 
    LEFT JOIN `exp_channel_titles` 
    ON (`n`.`entry_id`=`exp_channel_titles`.`entry_id`), 
    `exp_node_tree_6` `p`, 
    `exp_node_tree_6` 
WHERE `n`.`lft` 
BETWEEN `p`.`lft` 
AND `p`.`rgt` 
AND (`p`.`node_id` != `n`.`node_id` OR `n`.`lft` = 1) 
GROUP BY `n`.`node_id` 
ORDER BY `n`.`lft` 

我完全難住...謝謝!

+0

@Iain:你可以發表'exp_node_tree_6'和'describe exp_channel_titles'的結果,並簡要解釋你打算做什麼? – 2010-04-04 16:11:09

回答

2

如果您想知道計數,只需運行沒有group by的查詢即可。你會看到計數中的行來自哪裏。你可以修改count(*)count distinct(n.entry_id)

+0

我更新爲count(DISTINCT'n'.'entry_id'),現在它會產生更奇怪的結果... – 2010-04-04 15:53:11