2016-04-03 7 views
0

私は、クエリを持っている:PHP MySQLのORDERは

$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"); 

それは開始時に動作しますが、メンバーは作成者がいない場合、彼らはメンバーであれば、それはとても基本的には、順不同ソートするために開始しますそれは彼らがリーダーである前に表示されます。

よくあることは、

ありがとう!

+0

「LIKE」には2つのものがありますが、これは始まりと終わりの '、'です。これは正しくないと思います。最初にORDER BY節の最初の条件が来るようにします。 –

+0

サンプルデータが役に立ちます。セットデータ型を使用してフィールドに複数の値を格納しているようですが、特殊な[set functions(like、find_in_set)](http://dev.mysql.com/doc/refman/5.7/en/ set.html)が役に立ちます – xQbert

答えて

1

主な問題は、テーブルがThird normal formにないことです。そのため、最終的には動作しないSQLクエリ、特にORDER BYの部分(カンマを使用した前述のLIKEフィルタの他に)を開発しようとします。

テーブルを3NFに持ってくると、意味をなさないORDER BY文を書くことができます。

Btw:mysql_*()関数をもう使用しないでください。これらはdeprecatedです。代わりにPDOを使用してください。