2009-11-24 83 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