Php alors explode obtenir la ligne de nom d'une table MySql
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.
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);