1

これは以前ここで話されたことを知っています。しかし、私の状況は少し異なり、とても近いです。

ニュース データ テーブルからカテゴリ 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 をループします。

これは単純な問題であることはわかっていますが、ループを使用するのは初めてです。

4

2 に答える 2

5

mysql_fetch_row0 でインデックス付けされた配列を返すため$cat_title_row['cat_name']、目的の結果が得られません。代わりに使用mysql_fetch_assocすると、正常に動作するはずです。

PHPマニュアルから:

mysql_fetch_row() は、フェッチされた行に対応する文字列の数値配列を返すか、それ以上行がない場合は FALSE を返します。

mysql_fetch_row() は、指定された結果識別子に関連付けられた結果から 1 行のデータをフェッチします。行は配列として返されます。各結果列は、オフセット 0 から始まる配列オフセットに格納されます。

于 2009-11-24T23:45:02.813 に答える
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);
于 2009-11-24T23:51:20.067 に答える