2015-05-11 43 views
8

Bir veritabanına sahip olduğumu varsayalım, tablo 1'den 20'ye kadar ides içeren satırlar içeriyor.mysql - alandan düzgün çalışma düzgün çalışmıyor

Önce 3 satırını 3,4,1 numaralı kimliğe döndürmek ve sonra diğer satırları döndürmek istiyorum. Ben nasıl ben ilk gelmek gerekir garip 3 sıra

id 
13 
17 
16 
15 
7 
6 
5 
2 
3 
4 
1 

sonunda gösteriyoruz,

: bu kodun sonucudur

SELECT id 
FROM prod 
ORDER BY field(id, 3, 4, 1) 
LIMIT 20 

: Bu benim kodudur Bu 3 satırı listenin en üstüne getirin mi?

Sen desc kullanabilirsiniz Teşekkür

cevap

6

:

SELECT id 
FROM prod 
ORDER BY field(id, 3, 4, 1) DESC 
LIMIT 20 

Sorun, tarafından artan bir sipariş edebilirim MySQL ilk NULL değerlerini koyar olmasıdır. İstesen,

SELECT id 
FROM prod 
ORDER BY field(id, 1, 4, 3) DESC 
LIMIT 20 

Veya: aslında sırayla satırları istiyorsanız

3, 4, 1 (soru bu şartı üzerinde belirsiz olan), daha sonra field açıklamada onları ters fantezi be:

ORDER BY - field(id, 3, 4, 1) DESC 
+0

@sgtBOSE deneyebilirsiniz için. . . Yorumun ne olması gerektiğinden emin değilim. Bu, listenin en üstünde üç satırı koyar, OP'nin sorduğu şey budur. –

+0

Çözüm şu anda hazır. :) –

0

Bunu görmek DESC

SELECT id 
FROM prod 
ORDER BY field(id, 3, 4, 1) DESC 
LIMIT 20 

ile deneyin ms siparişiniz önemlidir. Ters sayılar doğru bir sonuç başka bir yol case-when kullanmaktır

SELECT id 
FROM prod 
ORDER BY field(id, 1, 4, 3) DESC 
LIMIT 20 
1

almak ve bir order value

select * from prod 
order by 
case 
    when id = 3 then 0 
    when id=4 then 1 
    when id=1 then 2 
    else 3 
end,id 
limit 20 
; 
0

Test edilmedi her id veren ancak

SELECT id, 
     (
      CASE 
       WHEN id = '3' THEN 0 
       WHEN id = '4' THEN 1 
       WHEN id = '1' THEN 2 
      END 
     ) as rank 
     FROM prod 
     ORDER BY rank 
     LIMIT 20;