|
|
|
| Делаю форум!
1-я таблица categories; столбцы: id, name.
2-я таблица forums; столбцы: id, name, category.
id name
1 Первая категория
2 Вторая категория
3 Третья категория
id name category
1 Первый 1
2 Форум №2 1
3 Форум №3 1
4 Форум №4 3
id первой таблицы должна совпадать с category второй таблицы
$arra = $db->query("SELECT c.id AS cid, c.name AS cname, f.name AS fname, f.description AS fdescription FROM ".$smpd['table']['categories']." AS c INNER JOIN ".$smpd['table']['forums']." AS f ON c.id=f.category ORDER BY c.position ASC");
for($i=0;$i<$db->count($arra);$i++)
{
$co = $db->fetch($arra);
$text.= "<BR>
<DIV class=tableborder><DIV class=maintitle align=left><A href='".$co[cid]."'>".$co[cname]."</A></DIV>
<TABLE cellSpacing=1 cellPadding=4 width='100%' border=0>
<TBODY><TR>
<td class=titlemedium align=middle width='2%'><IMG height=1 alt='' src='' width=28></td>
<td class=titlemedium align=left width='59%'>Форум</td>
<td class=titlemedium align=middle width='7%'>Тем</td>
<td class=titlemedium align=middle width='7%'>Ответов</td>
<td class=titlemedium align=left width='25%'>Обновления</td></TR>
<TR></TBODY>
</TABLE></DIV>";
}
|
В результате выходит "Первая категория" аж три раза, потому что к ней принадлежит 3 форума.
Что в коде нужно поправить, чтоб по человечески отображалась каждая категория по одному разу, и чтоб если категория без форума,
то она не отображалась. Спасибо. | |
|
|
|
|
|
|
|
для: DimaXP
(30.10.2005 в 11:45)
| | Необходимо сгруппировать (GROUP BY) результат по категориям, т.е.
<?php
$query = "SELECT c.id AS cid,
c.name AS cname,
f.name AS fname,
f.description AS fdescription
FROM ".$smpd['table']['categories']." AS c INNER JOIN ".$smpd['table']['forums']." AS f
ON c.id=f.category
GROUP BY c.name
ORDER BY c.position ASC"
$arra = $db->query($query);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(30.10.2005 в 13:19)
| | Спасибо большое!!!! | |
|
|
|
|
|
|
|
для: DimaXP
(30.10.2005 в 13:45)
| | Еще можно вопросик?
Я сделал вот так. Файл glav_cat.htm это шапка категории, файл glav_forum.htm это отображение форумов в данной категории,
но почему то они отображаются по одному форуму на категорию, опять что-то неправельно сделал?
<?
$file = file("templates/$templ_name/forum/glav_cat.htm") or error (2, "Файл glav_cat.htm не доступен");
$file_forum = file("templates/$templ_name/forum/glav_forum.htm") or error (2, "Файл glav_forum.htm не доступен");
$arra = $db->query("SELECT c.id AS cid, f.id AS fid, c.name AS cname, f.name AS fname, f.description AS fdescription FROM ".$smpd['table']['categories']." AS c INNER JOIN ".$smpd['table']['forums']." AS f ON c.id=f.category GROUP BY c.name ORDER BY c.position ASC");
for($i=0;$i<$db->count($arra);$i++)
{
$co = $db->fetch($arra);
foreach($file as $c)
{
$c = str_replace("@name@", "<a href="">".$co[cname]."</a>", $c);
$text.=$c;
}
foreach($file_forum as $f)
{
$f = str_replace("@forum@", "<a href=".$co[fid].">".$co[fname]."</a>", $f);
$f = str_replace("@desc@", $co[fdescription], $f);
$text.=$f;
}
?>
|
| |
|
|
|
|
|
|
|
для: DimaXP
(30.10.2005 в 15:21)
| | Сложно судить так как нам не известно содержимое страниц... Что выводится сейчас и что должно выводится на самом деле? | |
|
|
|
|
|
|
|
для: cheops
(30.10.2005 в 22:55)
| | Если смотреть из таблицы что я вверху привел, то сейчас выводится:
Категория Первая категория за ней форум Первый, а должны быть еще Форум №2, и Форум №3
Далее опять категория Третья категория за ней форум Форум №4.
Категория Вторая категория не выводится, так как к ней нет форумов.
надеюсь понятно объяснил, на рисунке то, что выводится. | |
|
|
|
|
|
|
|
для: DimaXP
(31.10.2005 в 00:27)
| | Сгруппируйте не по категориям GROUP BY c.name, а по форуму GROUP BY f.name... Что получается? | |
|
|
|
|
|
|
|
для: cheops
(31.10.2005 в 02:54)
| | Получается почти как раньше. Первая категория отображается 3 раза, по кол-ву форумов, и т.д. Вообщем сколько форумов столько и котегорий. Результат на рис. | |
|
|
|
|
|
|
|
для: DimaXP
(31.10.2005 в 05:24)
| | Хм... значит у вас код так организован. Что делают циклы, в первую очередь внешний цикл и почему внутренних циклов два? | |
|
|
|
|
|
|
|
для: cheops
(31.10.2005 в 12:33)
| | Что то я не пойму о каких циклах идет речь. Если я правельно понимаю внешний это
<?php
for($i=0;$i<$db->count($arra);$i++)
{
$co = $db->fetch($arra);
}
?>
|
А внутренние это:
<?php
foreach($file as $c)
{
$c = str_replace("@name@", "<a href=".$co[cname].">".$co[cname]."</a>", $c);
$text.=$c;
}
?>
|
Если я правельно понял, то внешний служит для вывода записей из таблици. А внутренние это часть шаблона. А их не может быть два? Может их разъеденить? | |
|
|
|
|
|
|
|
для: DimaXP
(31.10.2005 в 20:49)
| | Нет их может быть два и больше... но у меня большое подозрение, что цикл
foreach($file_forum as $f)
|
вложен
Хотя может и нет... вообще результаты представляются в виде
Первая категория Форум1
Первая категория Форум2
Первая категория Форум3
Вторая категория Форум4
Вторая категория Форум5
Вторая категория Форум6
Т.е. имя категории будет присутствовать в результирующей таблице столько раз, сколько форумов в нём - такую ситуацию следует обрабатывать. Как я понимаю она не обрабатывается и получается несколько категорий. | |
|
|
|
|
|
|
|
для: cheops
(01.11.2005 в 12:47)
| | Все сделал! У меня еще вопрос, как сделать, чтоб в конце страницы подсчитывалось количество запросов к базе данных? | |
|
|
|
|
|
|
|
для: DimaXP
(03.11.2005 в 11:08)
| | Можно создать переменную со значением 0. А при каждом запросе прибавлять к ней 1. Хотя возможно есть методы лучше. | |
|
|
|
|
|
|
|
для: DimaXP
(03.11.2005 в 11:08)
| | Имеется ввиду вообще для всего сервера или только выполненые данным скриптом? Если последнее лучше воспользоваться вариантом, предложенным napTu3aHом. | |
|
|
|
|
|
|
|
для: cheops
(03.11.2005 в 13:20)
| | Понятно, спасибо вам! | |
|
|
|