Php explode затем получает строку name из таблицы MySQL

StackOverflow https://stackoverflow.com/questions/1793730

  •  22-09-2019
  •  | 
  •  

Вопрос

Я знаю, что об этом здесь уже говорили раньше.Однако моя ситуация немного иная, и я так близок к этому.

Я хотел бы разнести массив идентификаторов категорий из таблицы данных новостей, а затем получить название категории из таблицы категорий.

Прямо сейчас я могу извлечь идентификаторы и просто разложить их по полочкам внутри цикла 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 .= ', ';
        }

 } 

Идея заключается в том, что это позволит получить названия категорий из таблиц категорий, которые были разнесены, и добавит запятую обратно в конец всех таблиц, кроме последней.Я не могу получить название категории, и когда я возвращаю идентификатор, он зацикливается на идентификаторе для всех новостей.

Я знаю, что это простая проблема, я просто новичок в использовании циклов.

Это было полезно?

Решение

mysql_fetch_row возвращает массив, индексированный с 0, так что $cat_title_row['cat_name'] не даст вам желаемых результатов.Использование mysql_fetch_assoc вместо этого, и это должно работать нормально.

От Руководство по PHP:

mysql_fetch_row() возвращает числовой массив строк, который соответствует выбранной строке, или FALSE, если нет других строк.

mysql_fetch_row() извлекает одну строку данных из результата, связанного с указанным идентификатором результата.Строка возвращается в виде массива.Каждый столбец результатов хранится в массиве смещение, начиная со смещения 0.

Другие советы

вы могли бы просто использовать mysql_result вот так:

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

если вы хотите, чтобы все они были в списке, разделенном запятыми, вы могли бы использовать взорваться вот так:

$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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top