Yani, benim veritabanında, ben enstrüman isimlerini (ve çeşitli diğer nitelikleri) saklayabilirsiniz. En id
birincil anahtar, ve name
, benzersiz bir anahtar diyelim.
Bir PHP script olarak, ben onların araç sınıfı ile öğeleri seçin, şöyle:
$name = mysql_real_escape_string($_POST['name']);
$row = mysql_fetch_row(mysql_query("SELECT * FROM `instruments` WHERE name LIKE '%$name%' ORDER BY id"));
Sonuç tablosu:
id name
1 "Flute 2"
2 "Bass Flute"
3 "Flute 10"
4 "Flute 7"
Bu bana sadece "Saksafon" sorgulayarak "Soprano Saksafon", "Alto Saksafon", vb gibi araçların tüm aile, seçmenize olanak sağlar.
Bu özel örnekte, sonuç (eğer auto_incremented varsayabiliriz olan) kendi id tarafından orered edilir. Daha ideal evet, alfabetik sıraya göre sipariş olurdu?
id name
2 "Bass Flute"
3 "Flute 10"
1 "Flute 2"
4 "Flute 7"
O çalışıyor, ama müzisyenler olmak, onlar DB admin ile etrafında vida gibi ve Flüt sonuçlarında "Flüt" yukarıda listelenen "Bas flüt" sahip kibarca almak, ve really 'don yok t "Flüt 2" önce listede "Flüt 10" olan kibarca alır.
Yani, hayır ORDER BY score_order
var gibi görme (bu çok kolay olurdu, o ... olmaz), nasıl düzgün araçlarını görüntülemek için sistemi sipariş çeşit tanıtmak olabilir?
Upon brainstorming, I came upon one solution: I could add one more column of type integer, and "rank" the instruments based on their importance (that is, Piccolos would be "1", Flutes "2", etc):
... nts` WHERE name LIKE '%$name%' ORDER BY rank, name"));
id name rank
3 "Flute 10" 2
1 "Flute 2" 2
4 "Flute 7" 2
2 "Bass Flute" 5
Ancak, bu "Flüt 10" "Flüt 2" önce gelir, alphanumerically gerçeğini hesaba katmaz.
İdeal sonuç tablosu (rank
, ve sonra tarafından emretti name
):
id name rank
6 "Piccolo" 1
1 "Flute 2" 2
4 "Flute 7" 2
3 "Flute 10" 2
5 "Alto Flute" 4
2 "Bass Flute" 5
Yani, benim sorular:
- Bu uygun bir çözüm olduğunu ve çaba uygulamak için değer mi?
- Yerine sayısına göre sayının tüm numarasını, analiz SQL sipariş kayıtları için bir yolu var mı?
Teşekkürler!