【问题标题】:Php explode then get the name row from a MySql TablePHP 爆炸然后从 MySql 表中获取名称行
【发布时间】:2010-12-20 02:33:51
【问题描述】:

我知道这已经在这里讨论过。但是,我的情况有点不同,我很接近。

我想从新闻数据表中分解一组类别 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。

我知道这是一个简单的问题,我只是刚开始使用循环。

【问题讨论】:

  • 另外,您可以使用 IN 将 SQL 压缩成一条语句,如下所示:$s= "SELECT * FROM news_categories WHERE cat_id IN ($post_cats_data)"

标签: php loops foreach explode


【解决方案1】:

mysql_fetch_row 返回一个索引为 0 的数组,所以$cat_title_row['cat_name'] 不会给你想要的结果。请改用mysql_fetch_assoc,它应该可以正常工作。

来自PHP manual

mysql_fetch_row() 返回对应于 获取的行,如果没有,则为 FALSE 更多行。

mysql_fetch_row() 获取一行 来自相关结果的数据 指定的结果标识符。这 行作为数组返回。每个 结果列存储在数组中 偏移量,从偏移量 0 开始。

【讨论】:

  • 那行得通,现在我觉得很傻。我也讨厌我离得太近了!
【解决方案2】:

你可以像这样使用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 是正在检索的结果集中的行号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
相关资源
最近更新 更多