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