2016-04-03 33 views
0

Ben bir sorgu var:PHP MySQL SİPARİŞ

$team_member_result = mysql_query("SELECT * FROM teams 
      WHERE team_creator LIKE '%,$player_main_id,%' 
       OR team_owner LIKE '%,$player_main_id,%' 
       OR team_leaders LIKE '%,$player_main_id,%' 
       OR team_captains LIKE '%,$player_main_id,%' 
       OR team_members LIKE '%,$player_main_id,%' 
      ORDER BY team_creator ASC, team_owner ASC, 
         team_leaders ASC, team_captains ASC, 
         team_members ASC"); 

O başlangıçta çalışır, ancak üye bir yaratıcısı değilse onlar üyesi iseniz o kadar temelde, sırasız sıralamak başlar onlar bir lider olmadan önce gösterecektir.

Ne yapacağından emin değil,

Teşekkürler!

+0

herbiri '' LIKE '' da başladığınız ve dolduru 'an '' '' dır, doğru değil. İkincisi, ilk önce bu koşulu, 'ORDER BY' cümlesi –

+0

'da gelir. Örnek veriler yardımcı olur. Özel bir set datatipi kullanarak bir alanda birden fazla değeri depoladığınız görülüyor. Bu durumda özel [set işlevleri (find_in_set)] (http://dev.mysql.com/doc/refman/5.7/en/ set.html) yardımcı olabilir – xQbert

cevap

1

Esas sorun, tablolarınızın Third normal form'da bulunmamasıdır. Bu nedenle, son olarak işe yaramayan bir SQL sorgusu geliştirmeye çalışın, özellikle de ORDER BY kısmı (önceden belirtilen LIKE filtresiyle birlikte virgüllerle).

Tablolarınızı 3NF'ye getirin, daha sonra mantıklı olan bir ORDER BY ifadesi yazabilirsiniz.

Btw .: mysql_*() işlevlerini artık kullanmayın, bunlar deprecated. Bunun yerine PDO kullanın.