2017-04-19 5 views
-1

MySQLSELECTステートメントを実行できないため、私は助けを求めます。MySQL - 固定数の行まで選択

SELECTは、特定の条件に従って最初の行が塗りつぶされている限り、350行を返します。スペースが残っている場合、残りの部分は別の条件で満たされます。

+1

あなたは – victor

+0

今持っているものを投稿してください可能性があり、私はあなたが最初のhttpを参照してください、代わりに350の12行、たとえば、に要件を変更し、提案://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句の式を使用します。例えば

:条件t.foo >= 117 AND t.bar IN (2,3,5)を満たす

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 

行が最初に注文されます。 (ORDER BYは式からの戻りで動作するため、その条件は評価され、IF関数は0または1を返します。ORDER BY句の後続の式も同じ方法で評価されます。

LIMIT句は、行の数が制限されますが返されますが、クエリはmytableは350行よりも少ないが含まれている場合は、たとえば少ない行を返さないことを保証するものではありません。

+0

こんにちはスペンサー!ご協力ありがとうございました!それはまさに私が必要としたものでした。 –

+0

ANSIに準拠すると、MySQL固有のIF()関数の代わりにCASE式が使用されます。 't.foo> = 117 THEN 0 ELSE 1 END' – spencer7593

0

あなたが好き意味:

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

をそれとも、「列= 42」と、その後は350行を読んで最初の行をしたいですか?

+1

ORDER BYのないLIMITはかなり意味がないことに注意してください。 – Strawberry

+0

こんにちはDavid!ご協力ありがとうございました!しかし、私は以下の答えを探していました。 –

0

あなたはLIMITで返される行数を制限しますあなたが好きな行を言うにはORDER BYを使用してください。

コードは、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です。 –

関連する問題