Php MySQL tablodan isim satır olsun sonra patlayabilir

2 Cevap php

Bunu daha önce hakkında burada konuştuk olmuştur biliyorum. Ancak, benim durum biraz farklı ve ben çok yakın değilim.

Ben daha sonra kategori tablosundan kategori adını almak bir haber veri tablosundan kategori id bir dizi patlamaya istiyorum.

Şu anda ben id nin Çıkış almak ve kullanarak haber veriler için ise döngü içinde gayet onları patlayabilir taşıyor:

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

Şimdi sıkışmış alıyorum nerede haber kategorileri alma ve adı dışarı yankılanır.

 $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 .= ', ';
        }

 } 

Fikir bu patladı edildi kategori tablodan kategori adlarını alacak ve sonunda herkes ama son bir geri bir virgül eklemek olacaktır. Ben kategori adını alamıyor ve ben kimliği döndüğünüzde tüm haberler için id olsa döngüler.

Ben döngüler kullanarak sadece yeni kulüpler, bu basit bir sorun olduğunu biliyorum.

2 Cevap

mysql_fetch_row 0 endeksli bir dizi döndürür, böylece $cat_title_row['cat_name'] size istenen sonuçları vermeyecektir. mysql_fetch_assoc yerine kullanmak ve iyi çalışması gerekir.

Dan PHP manual:

mysql_fetch_row() returns an numerical array of strings that corresponds to the fetched row, or FALSE if there are no more rows.

mysql_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0.

sadece mysql_result Bu gibi kullanabilirsiniz:

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

Eğer bir virgülle ayrılmış listesinden hepsini isterseniz implode Böyle kullanabilirsiniz:

$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);

Eğer böyle bir şey yapabileceğini bunu tek bir sorguda yapılan tüm almak için:

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