然后Php爆炸从MySql表中获取名称行

时间:2009-11-24 23:38:03

标签: php loops foreach explode

我知道之前已经在这里讨论过。但是,我的情况有点不同,我很亲密。

我想从新闻数据表中分解一个类别ID数组,然后从类别表中获取类别名称。

现在我可以使用以下内容获取id了,并在while循环中为新闻数据爆炸:

    $post_cats_data = $news_data['cat_id']; // 1,6,7,11
    $post_cats_id = explode(",", $post_cats_data);

现在我陷入困境的是获取新闻类别并回应出这个名字。

 $cat_count = count($post_cats_id);
 $i = 0;
     foreach($post_cats_id as $cat_id){
       $cat_qry = mysql_query("SELECT * FROM news_categories WHERE `cat_id` = '$cat_id'") or die(mysql_error());
    $cat_title_row = mysql_fetch_row($cat_qry) or die(mysql_error());
      $i++;
      $write_cat .= $cat_title_row['cat_name'] ;
        if($i<$cat_count){
           $write_cat .= ', ';
        }

 } 

这个想法是,这将从爆炸的类别表中获取类别名称,并将逗号添加回每个人的末尾,但最后一个。我无法获取类别名称,当我返回ID时,它会循环显示所有新闻的ID。

我知道这是一个简单的问题,我只是新手使用循​​环。

2 个答案:

答案 0 :(得分:5)

mysql_fetch_row返回一个索引为0的数组,因此$cat_title_row['cat_name']不会为您提供所需的结果。请改用mysql_fetch_assoc,它应该可以正常工作。

来自PHP manual

  

mysql_fetch_row()返回一个对应于的数字字符串数组   获取行,如果没有则返回FALSE   更多行。

     

mysql_fetch_row()获取一行   与结果相关的数据   指定的结果标识符。该   row作为数组返回。每   结果列存储在数组中   偏移量,从偏移量0开始。

答案 1 :(得分:0)

您可以像这样使用mysql_result

$cat_title = mysql_result(mysql_query("SELECT cat_name FROM news_categories WHERE `cat_id` = '$cat_id'"),0);

如果你想要所有这些都在逗号分隔列表中,你可以使用implode这样:

$cat_titles = array();
foreach($post_cats_id as $cat_id){
  $cat_title = mysql_result(mysql_query("SELECT cat_name FROM news_categories WHERE `cat_id` = '$cat_id'"),0);
  $cat_titles[] = $cat_title;
}
$comma_cat_titles = implode(',',$cat_titles);

要在一个查询中完成所有操作,您可以执行以下操作:

$cat_titles = mysql_result(mysql_query("SELECT GROUP_CONCAT(`cat_name` SEPARATOR ',') FROM `news_categories` WHERE `cat_id` IN (".$post_cats_data.")"),0);