簡體   English   中英

MySQL子查詢問題

[英]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個條目,並對條目進行如下排序:

  1. 選擇最新條目。 它表示ORDER BY date(mysql datetime)DESC,ID DESC。

  2. 從這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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM