Question

Je sais que cela a été parlé ici avant. Cependant, ma situation est un peu différente et je suis si proche.

Je voudrais faire exploser un tableau de catégorie id d'une table de données nouvelles, puis obtenir le nom de la catégorie de la table de la catégorie.

En ce moment, je suis en mesure d'obtenir et de les faire exploser le sortir de l'identifiant très bien à l'intérieur de la boucle while pour les données nouvelles en utilisant:

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

Maintenant où je suis coincé s'obtient les catégories de nouvelles et faisant écho le nom.

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

 } 

L'idée est que cela va amener les noms des catégories à partir des tables de catégorie qui ont été éclatées et ajoutera une virgule de la fin de tout le monde, mais le dernier. Je ne peux pas obtenir le nom de la catégorie et quand je retourne l'ID il boucle si l'ID pour toutes les nouvelles.

Je sais que c'est un problème simple, je suis nouveau à l'aide de boucles.

Était-ce utile?

La solution

mysql_fetch_row retourne un tableau indexé à 0, donc $cat_title_row['cat_name'] ne vous donnera pas les résultats souhaités. Utilisez plutôt mysql_fetch_assoc et il devrait fonctionner correctement.

De manuel PHP :

  

mysql_fetch_row () retourne un tableau numérique de chaînes qui correspond à la   ligne récupérée, ou FALSE s'il n'y a pas   plus de lignes.

     

mysql_fetch_row () lit une ligne de   les données à partir du résultat associé à   l'identificateur de résultat déterminé. le   ligne est renvoyée sous forme de tableau. Chaque   colonne de résultat est stocké dans un tableau   décalage, en commençant à la position 0.

Autres conseils

vous pouvez simplement utiliser mysql_result comme ceci:

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

si vous voulez tous dans une liste délimitée par des virgules, vous pouvez utiliser imploser comme ceci:

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

Pour tout faire en une seule requête que vous pourriez faire quelque chose comme:

$cat_titles = mysql_result(mysql_query("SELECT GROUP_CONCAT(`cat_name` SEPARATOR ',') FROM `news_categories` WHERE `cat_id` IN (".$post_cats_data.")"),0);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top