SORU
1 EYLÜL 2010, ÇARŞAMBA


MySQL TARAFINDAN sırayla satır pozisyon alın

Aşağıdaki MySQL tablo:

 ----------------------------- 
  id INT UNSIGNED              
  name VARCHAR(100)            
 ----------------------------- 

Nasıl bir seçim yapabilirtekname ASC göre sıralandığında tablo diğer satırlar arasında satır VE konumu. Eğer öyleyse tablo verileri bu gibi görünüyor eğer, adına göre:

 ----------------------------- 
  id | name                    
 ----------------------------- 
   5 | Alpha                   
   7 | Beta                    
   3 | Delta                   
  .....                        
   1 | Zed                     
 ----------------------------- 

Nasıl Beta satır satır geçerli konumunu seçmek elde edebilir miyim? Sonuç şöyle olurdu arıyorum ayarlayın:

 ----------------------------- 
  id | position | name         
 ----------------------------- 
   7 |        2 | Beta         
 ----------------------------- 

SELECT * FROM tbl ORDER BY name ASC sonra basit bir numaralandırma PHP satırları yapabilirim, ama savurgan sadece tek bir satır için potansiyel olarak büyük bir yük seviyesinde bağımsız gibi görünüyor.

CEVAP
1 EYLÜL 2010, ÇARŞAMBA


Bunu kullanın:

SELECT x.id, 
       x.position,
       x.name
  FROM (SELECT t.id,
               t.name,
               @rownum := @rownum   1 AS position
          FROM TABLE t
          JOIN (SELECT @rownum := 0) r
      ORDER BY t.name) x
 WHERE x.name = 'Beta'

...eşsiz konumu bir değeri olsun. Bu:

SELECT t.id,
       (SELECT COUNT(*)
          FROM TABLE x
         WHERE x.name <= t.name) AS position
       t.name    
  FROM TABLE t      
 WHERE t.name = 'Beta'

...bağları aynı değeri verecektir. YANİ: iki değerleri ile ikinci sırada, edecekler de var pozisyon 2 zaman ilk sorgu verecek bir pozisyonun 2 tanesini, 3 ve diğer...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gadgetgal38

    gadgetgal38

    9 HAZİRAN 2009
  • whatever

    whatever

    30 EYLÜL 2005
  • YEAH1TV

    YEAH1TV

    19 ŞUBAT 2009