Tamam burada durum, ben Zend_Framework yazılmış bir uygulama var, o arka uç olarak MySQL ve MSSQL ile uyumludur. Şimdi, ZF iki dil arasındaki uyumsuzluklar SQL / farklılıkları bir çok çözme oldukça iyidir, ama ben yine de bu bir anlamaya henüz.
Amaç son derece basit bir ifadedir tablo 1 rasgele kaydını seçmektir.
Burada örneğin bir select ifadesi bulunuyor:
$sql = $db->select()
->from("table")
->order("rand()")
->limit(1);
Bu, aşağıdaki gibi MySQL için sql, çünkü MySQL veritabanı tabloları için mükemmel çalışıyor:
SELECT `table`.* FROM `table` ORDER BY rand() ASC
Şimdi diğer taraftan MSSql, newid() işlev yapmak randomize etmek için kullanır.
Ben bunu doğru sıralamasını kullanmak zorunda olduğunu fark yapmak için order() fonksiyonu haline geçebilir yardımcısı çeşit var mı? Ben belgeleri aradı ve zfforums üzerinde, birkaç ipucu buldum, ama hiçbir şey katı.
Ben buldun şeylerden biriydi:
ORDER BY RANDOM() not working - ZFForums.com
Bunlar aşağıdaki kullanıyor:
$res = $db->fetchAll(
'SELECT * FROM table ORDER BY :random',
array('random' => new Zend_Db_Expr('RANDOM()')
);
Bu çalışıyor ... ama ben bunu yazarak ve bir dize yerine yaparak benim select ifadesi kurmak isteyen değilim, ben aynı Zend_Db_Select nesne tutmaya çalışıyorum. Ben de ekstresinde ->order()
içine Zend_Db_Expr('RANDOM()')
geçen denedim ve başarısız. O da cevap bulmak için bir teorik çözüm nakleder, ama ben $ db-> () çağrısı getirme değiştirerek, bu içinde işlevini yeniden yazmak için arıyorum değil.
Herhangi bir fikir?