2014-12-04 48 views
1

數據我有一個MySQL表稱爲評論單個SQL查詢來檢索特定的順序(不ASC/DESC)

review_id, product_id, language_id, rating, review, author 

LANGUAGE_ID範圍從1至10 10種不同的語言。

比方說,我確定我的訪問者使用的語言id爲4

有編寫一個查詢的方式瀏覽網站: 1.首先抓住當前語言 該產品的評論2.接下來,抓住其他語種的該產品按語言分類

所以評論,基本上是使用以下2個查詢的作業運行一個接一個:

SELECT * FROM reviews WHERE product_id = 723 AND language_id = 4; 
SELECT * FROM reviews WHERE product_id = 723 AND language_id != 4 ORDER BY language_id ASC; 
+0

mm .. UNION可能是? – sectus 2014-12-04 10:16:07

+0

我想UNION會結合這兩個查詢。但是,性能是否仍然很低,即相當於2個查詢?我想我的目標是隻訪問一次表,因爲兩個查詢都在同一個表上運行。 – OC2PS 2014-12-04 10:18:13

+0

所以,在服務器端重新排序。 – sectus 2014-12-04 10:19:38

回答

2
SELECT * FROM reviews WHERE product_id = 723 
order by case when language_id = 4 then 0 else 1 end, language_id; 
+0

謝謝!這看起來有希望。將嘗試,然後接受答案。與此同時,除了http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html,我可以在哪裏閱讀有關排序順序的內容,這對我來說有點密集? – OC2PS 2014-12-04 10:22:18

+1

@ OC2PS不客氣。你發佈的鏈接有足夠的信息。像任何其他標量函數一樣考慮CASE-WHEN-ELSE-END,但是要使用特定的語法。例如SUBSTRING。你可以在任何可以使用CASE的地方使用這些功能 – Multisync 2014-12-04 10:27:02

+0

不錯,你爲我打開了一個全新的世界:-) – OC2PS 2014-12-04 10:28:36

2
SELECT * FROM reviews WHERE product_id = 723 AND language_id = 4 

UNION 
SELECT * FROM reviews WHERE product_id = 723 AND language_id != 4 ORDER BY language_id ASC; 

說明:

您的需求是非常簡單的。

你有兩個SQL,你想要一個組合輸出。

由於表格也是一樣的,所以使用MySQL UNION