MySQL中的order by子句在foreach循环中不起作用

时间:2012-07-16 08:57:53

标签: mysql sql-order-by

我正在尝试获取分配给特定子类别的配置文件名称 id = 9。当我运行下面的代码时,我得到了我想要的配置文件,但对于某些人来说 因为foreach循环中的ORDER BY子句不按名称对它们进行排序 按字母顺序排列。相反,它们的排序方式与它们在内部订购的方式相同 '子类别'表中的'配置文件'字段(配置文件的ID以逗号分隔)。 例如,如果在子类别['profiles']中我有',5,1,2',将显示配置文件名称 按以下顺序:

  1. ID = 5的个人资料
  2. ID = 1的个人资料
  3. ID = 2的个人资料
  4. 我正在使用explode()函数获取“子类别”中每个配置文件的ID 表,然后使用该ID从“配置文件”表中检索其信息 foreach循环中的查询。

    我在这里遗漏了什么?谢谢你的帮助。

    这是我的代码:

    <?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'];                   
    
               }
    
           }
    
    }
    ?>
    

1 个答案:

答案 0 :(得分:1)

您的结果不按名称排序的原因是因为您要在$ profile的foreach循环中使用新的SQL查询检索每个配置文件。在您的场景中,您将最终得到3个SQL查询,每个查询返回1个配置文件。因此,当声明“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'];                   

                     }

}
?>