Forum Webscript.Ru

Программирование => PHP => Тема начата: от 01 Февраля 2002, 12:47:03

Название: помогите ;)
Отправлено: от 01 Февраля 2002, 12:47:03
у меня такой вопрос:

в MySQL есть такие поля

id | tema | categorija

и я немогу понят, как мне зделать такое:

Categorija
tema1
tema2
tema3

Categorija2
tema1
tema2
tema3

категорий я заранее не знаю, и хочу штоб если появляется новая категория, ее выписывало на страничке

Спасибо
Название: помогите ;)
Отправлено: bhor от 01 Февраля 2002, 13:03:14
Сделай еще поле Categorija2
или ncategorija тогда все темы будешь кидать в Categorija, а уже номера категорий в ncategorija
Название: помогите ;)
Отправлено: DimovD от 01 Февраля 2002, 13:16:53
Так как ест и делай:

id  | tema  | categorija
01 | Тема1| Категория1
02 | Тема2| Категория1
03 | Тема3| Категория1
04 | Тема4| Категория1
05 | Тема1| Категория2
06 | Тема2| Категория2
07 | Тема3| Категория2
08 | Тема4| Категория2

Потом делаешь выборку по категории и получаешь темы...
Название: помогите ;)
Отправлено: dope от 01 Февраля 2002, 13:18:10
sorry, не врубился ;)

у меня ето так:

$query = mysql_query("SELECT * FROM tema ORDER BY tema ASC");
while ($row  =  mysql_fetch_array($query)) {
echo $row[\'categorija\'],"
;
echo $row[\'tema\'],"
";
}

пишет так:

1
tema
1
tema2

2
tema
2
tema2

а я хочю так:

1
tema
tema2

2
tema
tema2

Спасибо, и пожалейте начинающего ;)
Название: помогите ;)
Отправлено: ThE0ReTiC от 01 Февраля 2002, 16:16:36
НАпиши условие для проеврки, вывел-ли ты название категории или нет.
 Что-нить вроде:
$cat = \'\';
while ($row = mysql_fetch_array($query)) {
if ($cat != $row[\'categorija\']:
echo $row[\'categorija\'],"
;
$cat = $row[\'categorija\'];
endif;
echo $row[\'tema\'],"
";
}
Я это не тестил. Это повод для размышления. Если у тебя не получится - могу дописать.
Название: помогите ;)
Отправлено: DimovD от 01 Февраля 2002, 17:35:40
ThE0ReTiC
Да у него другая проблема, Ты сам подумай зачем всё это если Ты будешь знать названия категорий...
Ему надо просто вывести все из базы не указывая на конкретное поле.

А сделать тогда думаю надо так:
Сами категории засунуть в другую таблицу
id | category
а в таблицу Tema вставлять в поле categorija  id категории.
Тогда dope , Ты берёшь id категории из таблициы категорий, пишешь его название, потом по id достаёшь Темы из таблицы tema.
код не напишу, тороплюсь.
ThE0ReTiC если Тебе не влом, помоги человеку с кодом.
Название: помогите ;)
Отправлено: ThE0ReTiC от 01 Февраля 2002, 17:57:46
2DimovD
Нормализация базы :)
В принципе правильно.
Помогу
2dope
Тебе насколько срочно это надо?
 Завтра днем, если пропощу нормально?
А то на работе времени нет, а дома инет кончилася, платить надо идти :(
Сообщи.
Если совсем критично, попробую к сегодняшней ночи.
Название: помогите ;)
Отправлено: ThE0ReTiC от 01 Февраля 2002, 18:17:37
2dope

Ну смотри:
Делаешь в базе две таблицы, как DimovD  рассказал:
[sql]
CREATE TABLE category (
   id tinyint(4) NOT NULL auto_increment,
   name text NOT NULL,
   PRIMARY KEY (id),
   KEY id (id)
);

CREATE TABLE themes (
   id int(11) NOT NULL auto_increment,
   name text NOT NULL,
   category_id tinyint(4) DEFAULT \'0\' NOT NULL,
   PRIMARY KEY (id),
   KEY id (id)
);
[/sql]
одна та что уже есть, а другая, та что он расписал.
Вот то, что тебе надо:

...
...
$cat_q = mysql_query("SELECT id, name FROM category");
while($ct = mysql_fetch_assoc($cat_q))
{
echo\'\'.$ct["name"].\'
\';
$tq = mysql_query("SELECT name FROM themes WHERE themes.category_id=\'$ct[id]\'");
while($ts = mysql_fetch_assoc($tq))
{
echo$ts["name"].\'
\';
} // $ts
} //$ct
?>
Название: помогите ;)
Отправлено: dope от 01 Февраля 2002, 19:32:55
thanx, posmotriu, eto ne ochen srochno
Название: помогите ;)
Отправлено: dope от 06 Февраля 2002, 15:38:05
копалюсь, копаюсь и понять немогу:

если есть категория, но в етой категории ничего нету, т.е.
например так:

kat
link
link2

kat2
link
link2

kat3
<пусто>

посоветуйте, как зделать, штоб не показывало kat3, или другую, если она пуста? PHP как ThE0ReTiC написал

Спасибо
Название: помогите ;)
Отправлено: ThE0ReTiC от 06 Февраля 2002, 18:45:59
Допиши после
$tq = mysql_query("SELECT name FROM themes WHERE themes.category_id=\'$ct[id]\'");


if (mysql_num_rows($tq) >0) {

и после  цикла

while($ts = mysql_fetch_assoc($tq))
{
    echo$ts["name"].\'
\';
} // $ts
Поставь
}

Если надо, что название пустой темы тоже не выводилось, тогда так:

...
...
$cat_q = mysql_query("SELECT id, name FROM category");
while($ct = mysql_fetch_assoc($cat_q))
{
    $tq = mysql_query("SELECT name FROM themes WHERE themes.category_id=\'$ct[id]\'");
if (mysql_num_rows($tq) >0)
{
    echo\'\'.$ct["name"].\'
\';

while($ts = mysql_fetch_assoc($tq))
{
    echo$ts["name"].\'
\';
} // $ts
} // if
} //$ct

?>