2011-10-12 28 views
0

我使用的查詢像這樣這一個:排序在多個表對陣

SELECT p.name, d.overview 
FROM products AS p 
LEFT JOIN descriptions AS d ON p.DescriptionID = d.ID 
WHERE MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE) > 0 
OR MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) > 0; 

如何使這一成果的相關排序?

我已經試過

ORDER BY MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE) 
OR MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) DESC 

但這種簡化版,幫助堂妹結果的是根據其相關性不排序。

回答

1
MATCH ... OR MATCH ... 
      ^^ 

or使這成爲一個二進制表達式。二進制表達式評估爲true或false。所以你正在排序他們是否匹配。因爲where子句已經確保所有行匹配,所以這不會添加排序。

嘗試通過一個整數表達式訂購,像總結相關:

ORDER BY 
    MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE) + 
    MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) DESC 
+0

關於第二:'未知列「關聯」中「,其中clause'' – Yekver

+0

@Yekver:看起來像MySQL是不是很像我想的那樣靈活!我將刪除第二部分。 – Andomar

+0

因此,是不是因爲OR和+而有兩個不同的查詢? MySQL會將WHERE子句和ORDER BY優化爲一個查詢嗎? – Yekver