2016-03-08 15 views
0

我收到以下查詢。MySQL「OR」導致錯誤「ORDER BY」

SELECT t1.parent_id 
    , t1.id 
    , t2.slug  
    FROM t1  
    LEFT 
    JOIN t2 
    ON t2.node_id = t1.id    
WHERE t1.id 
    AND 
    (t1.parent_id = 501 
    OR t1.parent_id = 750 
    ) 
    AND t2.display = 1 
    AND t2.active = 1 
ORDER 
    BY t1.name ASC 

似乎工作,但排序是錯誤的(我可能是錯的 - 不是排序)。它就像GROUP BY t1parent_id ...

與此表:

-------------- 
name | parent_id 
a  | 501 
b  | 750 
c  | 501 
d  | 750 
-------------- 

我得到這樣的結果:

a 
c 
b 
d 

但我希望這樣的:

a 
b 
c 
d 

感謝您的時間和幫助...

更新:

@Juan Carlos Oropeza謝謝。我在phpMyAdmin中運行代碼 - 結果相同。我改變到內連接和除去WHERE t1.id(未雖然傷害),並用於T1 . parent_id` IN(501,750)代替:

mysql_query(" 
    SELECT 
     `t1`.`parent_id`, 
     `t1`.`id`, 
     `t2`.`slug`  
    FROM 
     `t1`  
    INNER JOIN 
     `t2` ON `t2`.`node_id` = `t1`.`id`    
    WHERE  
     `t1`.`parent_id` IN (501, 750) 
    AND 
     `t2`.`display` = 1 
    AND 
     `t2`.`active` = 1 
    ORDER BY 
     `t1`.`lft` 
    ASC 
"); 

相同的結果

+1

沒有任何意義。試試'SELECT CHAR_LENGTH(t1.parent_id)'也許你在那裏有特殊的字符。試着在這裏重現樣本,所以我們看看http://sqlfiddle.com/#!15/037bc/1 –

+0

你是什麼意思,你得到這個結果?複製你得到的確切結果! – sagi

+0

順便說一句,這是一個內部聯接 – Strawberry

回答

0

我發現這個問題。數據在t1.name中有缺陷。所以查詢實際上按照它應有的方式工作。感謝您的幫助!