2009-11-24 2 views
1

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

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

Прямо сейчас я могу выйти из Ид и взорвать их просто отлично внутри цикла в то время как для данных новостей с помощью:

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

} 

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

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

+0

Кроме того, вы можете сжать SQL в один оператор с помощью 'в' как это:' $ s = "SELECT * FROM news_categories WHERE cat_id IN ($ post_cats_data)" ' – leepowers

ответ

5

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

От PHP manual:

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

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

+0

Это сработало, теперь я чувствую себя глупо. Я тоже ненавижу, что я был близок к этому! – BandonRandon

0

вы могли бы просто использовать 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» в конце запроса, это сообщение об ошибке? – BandonRandon

+0

0 - номер строки из набора результатов, который извлекается – robjmills

Смежные вопросы