[英]MySQL sub-query issue
SELECT *
FROM (SELECT *
FROM content
WHERE topic='$id' AND active='1'
ORDER BY date DESC, id DESC
LIMIT 4) a
ORDER BY a.likes DESC
我有這個查詢。 我希望它從content
表中選擇4個條目,並對條目進行如下排序:
選擇最新條目。 它表示ORDER BY date(mysql datetime)DESC,ID DESC。
從這4個中選擇,按likes(mysql INT)DESC排序
運行查詢時,它返回錯誤的結果。 它選擇符合此條件的條目WHERE topic='$id' AND active='1'
。 它按喜歡的DESC排序條目,但忽略此條件ORDER BY date DESC, id DESC
,因此它首先顯示ID較小的結果。
可能是什么原因? 先感謝您
OP編輯后,正確的查詢將是
SELECT *
FROM (SELECT *
FROM content
WHERE topic='$id' AND active='1'
ORDER BY date DESC, id DESC
LIMIT 4) a
ORDER BY a.likes DESC, date DESC, id DESC
最外面的查詢上的ORDER BY
指定返回的行的順序。 沒有其他行的順序可以保證或暗示。
從最初的問題(在編輯之前)聽起來,OP希望行按likes
列的整數值降序返回。 也就是說,OP要指定:
ORDER BY a.likes DESC
在最外面的查詢上。
查詢返回的行將按最外層查詢的ORDER BY
定義的順序返回。 沒有其他行排序的保證。
如果OP希望按特定順序返回行,則最外層查詢的ORDER BY
子句中的表達式列表將需要不同地指定。 例如:
ORDER BY a.likes DESC, a.date DESC, a.id DESC
- 要么 -
ORDER BY a.date DESC, a.likes DESC, a.id DESC
內聯視圖查詢將使用內聯視圖中的ORDER BY
; 但是一旦實現了內聯視圖查詢,並被外部查詢引用為行源,則ORDER BY就消失了。 外部查詢可以自由訪問並以所需順序從內聯視圖(派生表)返回行; 不需要外部查詢來接受內聯視圖查詢上的ORDER BY; 外部查詢只是將派生表視為行集,就像其他任何表一樣。
(這是假設“ likes
”是content
表中的一列,而不是從其他表派生的結果。由於您使用*
作為SELECT列表,因此我們看不到查詢返回的列。)
(如果這不是OP所需要的,OP可以詳細說明指定結果集的要求。OP查詢中的其他內容看起來都很正確,以便在嵌入式視圖中獲取四個“最新”行。)
Try this:
SELECT *
FROM content
WHERE topic='$id' AND active='1'
ORDER BY date DESC, likes desc
LIMIT 4
You dont need another level of select to do order by.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.