MySQL,

2010-12-01 21 views
8

numaralı telefonla keyfi siparişi belirtiyor MySQL SELECT bildirimi için isteğe bağlı bir sıralama belirtmek mümkün müdür? ÖrMySQL,

SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7); 

IN hemen sonra listelenen sayıların sırası önemli görünmüyor.

+0

@MattDiPasquale - "1,3,2,9,7" seviyesinde siparişiniz var, sadece "1,2,3,9,7" için sonuçları yükleyin ve "1" sırasına göre ayarlayın. , 3,2,9,7'. Herhangi bir programlama dili belirtin mi? – ajreal

+0

WordPress, PHP kullanıyorum. Hepsini MySQL'de yapmak istiyorum, böylece PHP'de herhangi bir işlem yapmak zorunda kalmam. – ma11hew28

+0

@MattDiPasquale - 'find_in_set' hızlı değil ve çok optimize edilmiyor. PHP'de yapmak daha hızlı ve optimize edilmiştir. – ajreal

cevap

11

FIND_IN_SET fonksiyonu kandırmasına

SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY FIND_IN_SET(id, '1,3,2,9,7'); 

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

EDIT yapar: find_in_set fonksiyonunun dize argüman alanların eksikliği dikkat edin.

+0

Bunu test ettiniz mi? Ben denedim, sipariş var: 2, 3, 7, 9, 1, yanlış olan – ma11hew28

+0

boşlukları kaldırmak –

+0

Oh, güzel! Teşekkürler, işe yaradı! – ma11hew28

0

Kolay cevap:

başka bir "sipariş" int alanıyla Enstrüman verilerinizi ve o alanın TARAFINDAN sonra SİPARİŞ. Çoğu zaman gerekli olan bu olmalı. Müşterilerin, belirli bir ürüne belirli bir ürüne, örneğin -1 veya -99 gibi düşük değerleri sipariş alanına uygulayarak, bu ürünleri başarılı bir şekilde yapabildim.

Kompleks cevap:

o sıralamasını normalleştirmek istiyorsa bu geçerli olacak ve sırayla ikinci faktör olarak başka bir alana sahip belki, o ana tabloda zaten bu. Bu, bir not gibi, her sipariş noktasında ilişkili başka bilgilere sahipseniz de yardımcı olacaktır. Ya da, birçok tablo bu rastgele düzeni uygulayacak ve bu siparişi tek bir yerden düzenlemek/değiştirmek isteyeceksiniz.

SELECT t.*, o.ordering 
FROM table_name AS t 
LEFT JOIN table_name_ordering AS o ON t.ordering_id = o.id 
ORDER BY o.ordering, t.other_field 
4

Kontrol dışarı MySQL en ORDER BY FIELD:

Ne yapacağını alana göre sipariş sonra katılabileceğiniz bir tabloda "keyfi" sipariş ve olduğunu. Bence tam olarak istediğini yapacak.

+0

Bu, FIND_IN_SET değerinden daha mı hızlı? Bahse girerim, çünkü FIND_IN_SET gibi string ayrıştırma sözdizimi yoktur. Inandığım sözdizimi şöyledir: 'FIELD İLE SİPARİŞ (id, 1,3,2,9,7)' – Ciantic