0

id=9の特定のサブカテゴリに割り当てられているプロファイル名を取得しようとしています。以下のコードを実行すると、必要なプロファイルが得られますが、何らかの理由で、foreachループのORDER BY句では、名前のアルファベット順に並べ替えられません。代わりに、「サブカテゴリ」テーブルの「プロファイル」フィールド内での順序と同じ方法で順序付けられます(プロファイルのIDはコンマで区切られます)。たとえば、subcategories ['profiles']に'、5,1,2'がある場合、プロファイル名は次の順序で表示されます。

  1. ID=5のプロファイル
  2. ID=1のプロファイル
  3. ID=2のプロファイル

explode()関数を使用して、「subcategory」テーブル内の各プロファイルのIDを取得し、そのIDを使用して、foreachループ内のクエリを使用して「profile」テーブルから情報を取得しています。

ここに何か足りないものがありますか?ご協力いただきありがとうございます。

これが私のコードです:

<?php
$subcategories=mysql_query("select * from subcategories where id='9'");

while ($subcategories = mysql_fetch_array($subcategories)) 

{
 $profiles = $subcategories['profiles'];
 $profiles = explode(',', $profiles);

       foreach ($profiles as $p)
       {
         $all_places = mysql_query("select * from profile where id='$p' and active='1' order by name asc");

           while ($profile = mysql_fetch_array($all_places)) 
           {

               echo $profile['name'];                   

           }

       }

}
?>
4

1 に答える 1

1

結果が名前で並べ替えられない理由は、$profilesのforeachループで新しいSQLクエリを使用してすべてのプロファイルを取得しているためです。したがって、シナリオでは効果的に、それぞれ1つのプロファイルを返す3つのSQLクエリが作成されます。したがって、「order by」句が宣言されると、各クエリ内で名前で並べ替えられます。これには、それぞれ1つの結果のみが含まれます。

INステートメントの使用はあなたのために働きますか?例えば。

    <?php
$subcategories=mysql_query("select * from subcategories where id='9'");

while ($subcategories = mysql_fetch_array($subcategories)) 

{

//i assume $subcategories['profiles'] are integers separated by comma as mentioned
 $profiles = $subcategories['profiles'];

                 $all_places = mysql_query("select * from profile where id IN ($profiles) and active='1' order by name asc");

                     while ($profile = mysql_fetch_array($all_places)) 
                     {

                       echo $profile['name'];                   

                     }

}
?>
于 2012-07-16T09:05:28.983 に答える