0

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

  1. ID=5 的配置文件
  2. ID=1 的配置文件
  3. ID=2 的配置文件

我正在使用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'];                   

           }

       }

}
?>
4

1 回答 1

1

您的结果不按名称排序的原因是因为您在 foreach 循环中为 $profiles 使用新的 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'];                   

                     }

}
?>
于 2012-07-16T09:05:28.983 回答