2017-04-19 104 views
-1

我想請求幫助,因爲我無法在MySQL中執行SELECT聲明。MySQL - SELECT直到固定行數

SELECT應該返回350行,只要第一行根據特定條件填充並且如果剩餘空間,剩下的空間就會充滿另一個條件。

+1

請你後你有什麼權利現在 – victor

+0

我建議你先更改的要求,比方說,12行,而不是350,然後請參閱http ://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query。 – Strawberry

回答

1

在ORDER BY子句和LIMIT子句中使用表達式。

例如:

SELECT ... 
    FROM mytable t 
ORDER 
    BY IF((t.foo >= 117 AND t.bar IN (2,3,5)),0,1) 
    , IF((t.foo >= 0      ),0,1) 
    , IF((t.bar = 42      ),0,1) 
    , ... 
LIMIT 350 

行滿足條件t.foo >= 117 AND t.bar IN (2,3,5)將首先排序。 (因爲ORDER BY將根據表達式的返回值進行操作,將評估該條件,並且IF函數將返回0或1. ORDER BY子句中的後續表達式將以相同的方式進行評估。

LIMIT子句將限制行數返回,但不保證該查詢將不會返回例如行如果MYTABLE包含少於350行。

+0

嗨斯賓塞!感謝您的幫助!那正是我需要的。 –

+0

更符合ANSI標準的將使用CASE表達式來代替MySQL特定的IF()函數。 '當t.foo> = 117時,按順序排序然後0否則1結束' – spencer7593

0

你的意思是這樣的:

SELECT column(s) FROM TABLE WHERE column = 42 LIMIT 350 

還是你想的第一行,其中「一欄= 42」,然後閱讀350線?

+1

請注意,沒有ORDER BY的LIMIT是相當無意義的。 – Strawberry

+0

大衛你好!感謝您的幫助!但我正在尋找下面的答案。 –

0

你限制返回的行數與LIMIT你用ORDER BY來說你喜歡哪一排

假設你正在尋找re其中col ='best'的繩索,但如果沒有足夠的(即, 350)你也想與COL =「好」行:

select * 
from mytable 
where col in ('best', 'okay') 
order by case when col = 'best' then 1 else 2 end 
limit 350; 
+0

嗨Thorsten!感謝您的幫助!但我正在尋找上面的答案。 –

+0

好吧,實際上spencer7593和我給了你相同的答案:使用帶有條件的'ORDER BY'子句來實現你想要的。 'IF'只是MySQL,'CASE'是標準的SQL。 –