Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Категории и подкатегории
Форумы портала PHP.SU » » Работа с СУБД » Категории и подкатегории

Страниц (5): [1] 2 3 4 5 »
 

1. ibe - 20 Августа, 2009 - 22:18:43 - перейти к сообщению
Я пишу игровой портал.
Ситуация такая:
существуют категории и подкатегории(суб-категории) к ним.
Пример:
Цитата:
PC Игры(категория) - Новости(subcat) - Статьи(subcat) - Обои(subcat) - Прохождения, коды(subcat) - Видео
-------------------------------- -------------------------------- -----------------
PlayStation(категория№2) - Новости(subcat) - Статьи(subcat) - Обои(subcat)

---------------
У каждой категории свои подкатегории, но существуют и повторы(Статьи, Новости, Обои). Как это все можно реализовать. Я пытался по традиционному способу:
Создал в базе 2 таблици - categories, subcategories. Поля в таблице categories - id, title(название). Поля в таблице subcategories - id, title, cat(индефикатор родной категории).
Но в моем случае есть повторы в подкатегориях(Статьи, Новости). Вот здесь я и не как не могу сообразить как сделать все это.
---------------
P.S. Категории и подкатегории должны выводится в конструкции do, while.
2. dsb80 - 21 Августа, 2009 - 01:39:20 - перейти к сообщению
1-я табл 2 поля,2-я табл 3поля - все хорошо... только вот не совсем ясно что должно получится с повторяющимися категориями.. лучше както это изобразить графически чтоб была задача более ясна... т.е. если я правильно понял нужно создать еще 2 таблицы с новостями и статьями к этим подкатегориям, где указываются также категории и подкатегории ...
3. Roler - 21 Августа, 2009 - 08:04:08 - перейти к сообщению
Зачем вообще две таблицы? С каких пор это стало традиционным способом? Не понял
Делаем таблицу, в ней столбик вроде "parent_cat".
Если он пустой, либо 0 - это категория. Если нет - это категория.

Правда, я так и не понял, что за повторы, можно поподробнее?
Имеешь ввиду, глюки при выводе? Тогда приведи свой алгоритм вывода.
4. ibe - 21 Августа, 2009 - 08:16:02 - перейти к сообщению
К примеру категории "PC Игры" и "PlayStation3" содержат одинаковые подкатегории. А вывод подкатегорий у меня происходит по названному мной ранее параметру cat - (индефикатор родной категории) в базе данных.
5. Roler - 21 Августа, 2009 - 08:18:40 - перейти к сообщению
Нет, я всё равно не понимаю, что значит одинаковые категории, должно ли так быть или глюк, и вообще в чём проблема.
6. ibe - 21 Августа, 2009 - 08:23:21 - перейти к сообщению
Расклад таков:

PC Игры:
Новости - Статьи - Коды - Файлы - Видео - Прохождение
PlayStation3:
Новости - Статьи - Прохождение
------------------
Подкатегорий "Коды, Файлы, Видео" нет в категории PlayStation3. Но эта категория(PlayStation3) имеет и одинаковые по сравнению с категорий PC Игры подкатегории(Новости, Статьи).
-------------------------------
Вот я не понимаю, как можно реализовать это ?
7. Roler - 21 Августа, 2009 - 08:26:23 - перейти к сообщению
Ну, содержимое категорий же разное, так? Сделай просто по две пары подкатегорий, для обоих категорий.
8. ibe - 21 Августа, 2009 - 08:36:11 - перейти к сообщению
О_о Это тогда придется не две пары делать. У меня ведь ещё категории "XBOX360, Mobile, Flash, PSP"...
(Добавление)
ibe пишет:
О_о Это тогда придется не две пары делать. У меня ведь ещё категории "XBOX360, Mobile, Flash, PSP"...

9. Roler - 21 Августа, 2009 - 08:41:51 - перейти к сообщению
ibe
То есть, везде должны быть свои подкатегории "Новости" и "Статьи" с разным наполнением? Ну так делай для всех, это будет проще и намного удобнее для управления.
10. ibe - 21 Августа, 2009 - 08:52:23 - перейти к сообщению
Да. Только вот как это сделать можно.
Создать в базе таблицу или как ?
P.S Вывод у меня такой:
Цитата:
view.php?subcat=1&&cat=1

где subcat - индефикатор подкатегории, где cat - категория.
Для каждой подкатегории я пишу функцию с запросами и т.п. Теперь нужно делать это как-то по другому...
PHP:
скопировать код в буфер обмена
  1. function ShowNews($cat){
  2. include("include/db.php");
  3. $cat = $_GET['cat'];
  4. if (!isset($cat)) { $cat = 1; }
  5. // Создаем запросы
  6. $result = mysql_query("SELECT * FROM `news` WHERE `cat` = '$cat' ORDER BY `id` DESC", $db);
  7. if(mysql_num_rows($result) > 0)
  8. {
  9. $mynews = mysql_fetch_array($result);
  10.  do
  11.    {
  12.   echo "<td class='news-box-full'>
  13.                                                                                         <div class='news-item'><div class='news-item-a'>
  14.                                                                         <p><a href='/news/6932/view.html'>
  15.                                                                                         <img src='".$mynews['poster']."' width='150' height='100' alt='".$mynews['title']."' />
  16.                                                                                         </a>
  17.                                         <span class='date'>".$mynews['date']."</span>
  18.                                         <a href='/viewpost.php'>".$mynews['title']."</a> <div class='review' style='margin-left: 6px; vertical-align: middle;'><nobr>
  19.  
  20.                                                                                 </nobr></div>
  21.                                         </p>
  22.                                 </div></div>
  23.                                                   </td>";
  24.    }
  25.   while ($mynews = mysql_fetch_array($result));
  26. }
  27.  
  28. }
  29.  
  30.  
11. Champion - 21 Августа, 2009 - 09:11:07 - перейти к сообщению
Если категории просто с одинаковыми именами, но с разным содержанием, то это разные категории.
Если ты решил это реализовывать через БД, то таблица должна быть одна (id, parent_id, caption, ...). Названия полей вроде говорящие. Ну и выбираешь их. Делаешь Join on id=parent_id, у тебя всё удобно получается, формируешь массивы и выводишь.

Что конкретно не получится расскажу поподробнее, если надо. Только сам тоже пробуй.
12. ibe - 21 Августа, 2009 - 10:48:24 - перейти к сообщению
Не получается.
ибо я не совсем понял как это все реализовывать. Однако
13. Champion - 21 Августа, 2009 - 10:53:40 - перейти к сообщению
Что ты не понял? Тебе нужно сделать 3 вещи.
1 - создать таблицу.
2 - заполнить таблицу.
3 - сделать выборку из таблицы. Даже можно без всякого JOIN на себя. Я просто чуть по-другому представил себе задачу сначала.
4 - обработать выборку и создать массивы, из которых сформировать меню.
Даже 4 получилось. Где возникает запор?
14. Stierus - 21 Августа, 2009 - 10:57:54 - перейти к сообщению
Есть разные виды связей ... 1 к 1, многие ко многим и 1 ко многим. Ты сейчас выбираешь между 2-м и 3-м вариантом, итак:

Если у твоих категорий одинаковое название , но разное содержание (например, статьи в разделе железо и статьи в разделе игры называются одинаково - "статьи", но внутри все разное) - то ты их считаешь РАЗНЫМИ категориями с разными id, если же и содержание одно и то же (1 раздел статьи, но ссылки на этот раздел из разных мест) - то это одна и та же категория.

так вот, если у тебя получились разные категории - то ты оставляешь 1 таблицу со структурой id, parent_id, name ... этой таблицы хватает что бы нормально описать все зависимости. Если же у тебя получилось, что раздел 1, а родителей несколько - то ты делаешь 2 таблицы в базе данных:

id, name - тут ты описываешь все категории

id, parent_id - тут ты описываешь связи категорий друг с другом (и у id может быть несколько записей с родительскими категориями)
15. ibe - 21 Августа, 2009 - 11:19:53 - перейти к сообщению
Это понятно.
Запор с кодом. Я похоже запутался, никак не пойму как это можно вывести из базы...
Ссылки должны быть таковы:
CODE (text):
скопировать код в буфер обмена
  1. view.php?cat=ид_категории&&subcat=ид_подкатегории

 

Powered by ExBB FM 1.0 RC1