|
|
|
| Итак, у меня есть две таблицы 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>";
}
?>
|
В итоге у меня в каждой категории выводятся все названия статей.
А добиться я хочу вот такого представления:
Категория - Россия
О России
О Путине
О Медведеве
Категория - Беларусь
О Беларусии
О Батьке
О том как батька что то делает
Категория - Казахстан
О Казахстане
О Назарбаеве
О таможенном союзе.
Я побывал использовать сложные запросы к двум таблицам но желаемого эффекта не добился.
Подскажите пожалуйста как реализовать указанную задумку. | |
|
|
|
|
|
|
|
для: 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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: 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).
Примерный вид такой
---------------------------------------
| Россия |
|_____________________|
|О России |
|О Путине |
|_____________________|
---------------------------------------
|Беларусь |
|_____________________|
|О Беларуссии |
|О Лукашенко |
|_____________________|
---------------------------------------
|Казахстан |
|_____________________|
|О Казахстане |
|О Назарбаеве |
|_____________________|
Если сможете помогите пожалуйста! | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(01.10.2012 в 10:25)
| | Спасибо большое! Вы мне очень помогли! | |
|
|
|