SORU
11 ŞUBAT 2009, ÇARŞAMBA


MySQL - bir grup tarafından döndürülen Kontrol

Böyle bir veritabanı tablo var:

id    version_id    field1    field2
1     1             texta      text1
1     2             textb      text2
2     1             textc      text3
2     2             textd      text4
2     3             texte      text5

Mesai saati dışında sormaman değil, bir satır, ve sonra bazı metin veri versiyonlarını içerir.

Bu sorgu ve her bir ıd için en yüksek numaralı sürümü geri dönmek istiyorum. (ikinci ve son satırları sadece üzerinde bu kadar).

Buna rağmen version_id AZA tarafından sipariş ederek grubunu kullanarak denedim ama işe yaramıyor bu yüzden onun gruplandırılmış sonra sipariş gibi görünüyor.

Herkes herhangi bir fikir var mı? Olamaz inanamıyorum!

GÜNCELLEME:

Çalışır, ama bir alt sorgu kullanır, bu ortaya çıkıyor:

SELECT *
FROM (SELECT * FROM table ORDER BY version_id DESC) t1
GROUP BY t1.id

CEVAP
11 ŞUBAT 2009, ÇARŞAMBA


Bir sütun grubu-akıllı en fazla seçilmesi deniyor. Here are several different approaches for mysql.

Bunu yapardım:

SELECT *
FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1
INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id

Bu mysql sorgu için bellek geçici bir tablo oluşturmak olacak olsa da, nispeten daha verimli olacaktır. Zaten bir dizin (ıd, version_id) bu tablo için var sanırım.

Daha fazla veya daha az bu tür bir sorun için bir alt sorgu (semi-joins Bir başka örnek) kullanmak için SQL eksikliği.

Alt sorgular mysql iyi optimize değil ama aralarında alt çok kötü disk yerine bellek yazılı alacak kadar büyük olmadıkları sürece değil. Bu sorguda verilen tek sorgu uzun zaman önce milyonlarca satır olabilir iki değer vermez ama ilk sorguda select * alt sorgu bu sorunu çok daha çabuk zarar verebilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007
  • Press Start

    Press Start

    4 HAZİRAN 2006
  • videoisunrelated

    videoisunrel

    5 Mart 2009