2014-12-05 98 views
1

我需要首選加載50個entires。 假設我有mysql - 選擇「if」首選項

User_id mid  preference 
564  djng 2 
123  e3r3 1 
423  u5h5 1 
544  djnw 2 
545  njdw 2 

的事情是先加載具有親景「1」 entires,如果沒有「1」,則裝入所有其他左側,有限制50,所以當我們有40個entires與偏好「1」,並且例如100具有優先「2」這樣的MySQL查詢獲取 第一個40個entires具有優先「1」,然後附加左10具有優先「2」

目前我有

$query = "SELECT * FROM $db1 WHERE userid!='$userid' AND mediaid NOT IN 
      (SELECT mid FROM $db2 WHERE uid='$userid')"; 

回答

1

您的查詢似乎很少樂做你問什麼,但這樣做的一般方法是使用ORDER BYLIMIT

SELECT ... 
FROM ... 
WHERE ... 
ORDER BY preference 
LIMIT 0, 50 
+0

使用順序由是,只要ORDER BY 1,首先「1」,我猜? – dansr23 2014-12-05 07:46:37

+0

ORDER BY首選項,使用列名 – UnskilledFreak 2014-12-05 07:47:32

+0

否,'ORDER BY 1'將按第一個輸出列排序。 'ORDER BY Preference'將按首選項排序,這意味着首選項1將位於頂部。因此,如果您有40行的首選項爲1,100行的首選項爲2,則您將獲得所有首選項1和首選項10,這要歸功於LIMIT子句。 – 2014-12-05 07:47:40

0
$query = "SELECT * FROM $db1 WHERE userid!='$userid' AND mediaid NOT IN (SELECT mid FROM $db2 WHERE uid='$userid') ORDER BY preference ASC LIMIT 50"; 
+0

雖然你的答案可能是正確的,但請參考爲什麼以及如何工作解釋。 – RichardBernards 2014-12-05 08:15:18