Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ребята помогите пожалуйста
 
 автор: Blackadder   (25.09.2012 в 15:46)   письмо автору
 
 

Итак, у меня есть две таблицы Categories и data
В таблице категорий есть два поля categories_id и categories_title. А так же три записи.
В таблице data есть 9 полей, включая поле cat_id в котором указывается к какой из категорий относится статья.
Я хочу добиться следующего, вывести последовательно название Категорий, а под каждой категорией принадлежащие ей статьи.

Вот такой код я написал:

<?php 

$category 
mysql_query("SELECT * FROM categories"); //выбираю все категории
$teaser mysql_query ("SELECT * FROM data ORDER BY data_id DESC"); // выбираю все статьи
  
  
$teasers = array();
  
  while (
$row_teaser mysql_fetch_array($teaser)){  $teasers[] = $row_teaser; }
  
  while (
$row_category mysql_fetch_array($category)){
    echo 
$row_category['categories_title'];
    echo 
"<br /><hr>";
    
    foreach(
$teasers as $row_teaser){
     
      if (
$row_teaser['cat_id'] = $row_category['categories_id']){
        
    echo 
$row_teaser['data_title'];
    echo 
"<br>";
      } 
      
    }
    echo 
"<br /><hr>";
  }

?>


В итоге у меня в каждой категории выводятся все названия статей.
А добиться я хочу вот такого представления:

Категория - Россия
О России
О Путине
О Медведеве

Категория - Беларусь
О Беларусии
О Батьке
О том как батька что то делает

Категория - Казахстан
О Казахстане
О Назарбаеве
О таможенном союзе.

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

  Ответить  
 
 автор: Lotanaen   (25.09.2012 в 16:08)   письмо автору
 
   для: Blackadder   (25.09.2012 в 15:46)
 

ну видимо так:


<?php
$sql 
"select categories.categories_title, data.* from `categories`,`data` where categories.categories_id=data.cat_id order by cat_id;";
$result mysql_query($sql);
  
  
$id_cat 0;
  while (
$rows mysql_fetch_array($result)){  
  
      if (
$id_cat != $rows['cat_id']) {
    
        echo 
"<br /><hr>".$rows['categories_title']."<br /><hr>";
        
$id_cat $rows['cat_id'];
    }
    echo 
$rows['data_title']."<br>";
  }

?>

  Ответить  
 
 автор: Blackadder   (25.09.2012 в 18:05)   письмо автору
 
   для: Lotanaen   (25.09.2012 в 16:08)
 

Большое спасибо за помощь! Однако сейчас я снова вынужден просить вашей помощи.
Столкнулся вот с чем я.

Допустим в базе в каждой категории существует уже 3 записей, но вывести необходимо последние 2 записей.
Я написал вот такой запрос, основываясь на вашем запросе, но к сожалению он не срабатывает:

$sql = "select categories.categories_title, data.* from `categories`,`data` where categories.categories_id=data.cat_id order by data_id DESC limit 2;";


Во вторых столкнулся с вот такой вот неприятной штукой. Никак не могу теперь данные вывести в таблице.

Мне нужно в верхней ячейки выводить название категории
В нижней ячейки выводить принадлежащие этой категории названия статей. Вернее две последние статьи относящиеся к этой категории категории. Поэтому и написал выше как ограничить вывод статей двумя последними осортирвоанным по полю data_id (это id самой статьи в таблице data).

Примерный вид такой

---------------------------------------
| Россия |
|_____________________|
|О России |
|О Путине |
|_____________________|
---------------------------------------
|Беларусь |
|_____________________|
|О Беларуссии |
|О Лукашенко |
|_____________________|
---------------------------------------
|Казахстан |
|_____________________|
|О Казахстане |
|О Назарбаеве |
|_____________________|

Если сможете помогите пожалуйста!

  Ответить  
 
 автор: Lotanaen   (26.09.2012 в 10:29)   письмо автору
 
   для: Blackadder   (25.09.2012 в 18:05)
 

запрос Вам возможно и не нужно изменять, а изменить вывод, например так:


<?php
$sql 
"select categories.categories_title, data.* from `categories`,`data` where categories.categories_id=data.cat_id order by cat_id, data_id desc;";
$result mysql_query($sql);
  
  
$id_cat 0;
  
$ndata 2;
  
$i=0;
  
$table "<table>";
  
$tr1 "<tr>";
  
$tr2 "<tr>";
  while (
$rows mysql_fetch_array($result)){  
  
      if (
$id_cat != $rows['cat_id']) {
    
        
$tr1 .= "<td>".$rows['categories_title']."</td>";
        
$tr2 .= "<td>";
        
$id_cat $rows['cat_id'];
        
$i=0;
    }
    if (
$i>=$ndata)
        continue;
    
$tr2 .= $rows['data_title']."<br>";
    
$i++;
  }
  
$table .= $tr1."/tr>".$tr2."</tr></table>";
  echo 
$table;
    
?>

  Ответить  
 
 автор: Blackadder   (29.09.2012 в 14:23)   письмо автору
 
   для: Lotanaen   (26.09.2012 в 10:29)
 

Спасибо большое за помощь. Но у меня вот такие теперь проблемы возникли.

Благодаря вашей помощи, данные стали выводится вот так:

<table width='100%' border='1' cellspacing='1' cellpadding='1'><tr><td>Россия</td><td>Беларусь</td><td>Казахстан</td></tr><tr><td>О медведе и о том ка кон чуть не стал президентов России<br>
      <br><td>Батька Лукашенко и современная Беларусь<br>
        <br><td>Шымкент как лучший город Казахстана<br>
          <br></tr></table>


Не могли бы вы подсказать как выводить данные вот таким образом?
<table>
  <tr>
    <td>Россия</td>
  </tr>
  <tr>
    <td>О медведе и о том ка кон чуть не стал президентов России<br></td>
  </tr>
  <tr>
    <td>Беларусь</td>
  </tr>
  <tr>
    <td>Батька Лукашенко и современная Беларусь<br></td>
  </tr>
  <tr>
    <td>Казахстан</td>
  </tr>
  <tr>
    <td>Шымкент как лучший город Казахстана<br></td>
  </tr>
</table>

  Ответить  
 
 автор: Lotanaen   (01.10.2012 в 10:25)   письмо автору
 
   для: Blackadder   (29.09.2012 в 14:23)
 

ну так еще проще, например так:

<?php
$sql 
"select categories.categories_title, data.* from `categories`,`data` where categories.categories_id=data.cat_id order by cat_id, data_id desc;";
$result mysql_query($sql);
  
  
$id_cat 0;
  
$ndata 2;
  
$i=0;
  
$table "<table>";
  while (
$rows mysql_fetch_array($result)){  
  
      if (
$id_cat != $rows['cat_id']) {
    
        
$table .= ($i>0?"</tr>":"")."<tr><td>".$rows['categories_title']."</td></tr><tr><td>";
        
$id_cat $rows['cat_id'];
        
$i=0;
    }
    if (
$i>=$ndata)
        continue;
    
$table .= $rows['data_title']."<br>";
    
$i++;
  }
  
$table .= "</table>";
  echo 
$table;
    
?> 

  Ответить  
 
 автор: Blackadder   (01.10.2012 в 14:13)   письмо автору
 
   для: Lotanaen   (01.10.2012 в 10:25)
 

Спасибо большое! Вы мне очень помогли!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования