2009-11-24 82 views
1

我知道这已在此处讨论过。但是,我的情况有点不同,而且我很亲密。Php爆炸,然后从MySql表中获取名称行

我想爆炸一个新闻数据表中的类别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进行循环。

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

+0

另外,还可以使用'IN'这样的压缩你的SQL到一个单一的语句:'$ S = “SELECT * FROM news_categories WHERE CAT_ID IN($ post_cats_data)”' – leepowers 2009-11-25 00:02:59

回答

5

mysql_fetch_row返回索引为0的数组,因此$cat_title_row['cat_name']不会给你想要的结果。改为使用mysql_fetch_assoc,它应该可以正常工作。

PHP manual

和mysql_fetch_row()如果没有 更多的行返回字符串数值阵列对应于所述 提取的行,或FALSE。

mysql_fetch_row()从与 关联的结果中获取指定结果标识符的一行 数据。 行作为数组返回。每个 结果列存储的数组offset offset开始,0

+0

这工作,现在我觉得很傻。我也讨厌我太亲近了! – BandonRandon 2009-11-25 00:07:35

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); 
+0

查询结尾处的“0”是什么,用于错误报告? – BandonRandon 2009-11-25 00:07:01

+0

0是正在检索的结果集中的行号 – robjmills 2009-11-25 00:17:50