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 » » Вопросы новичков » Доска объявлений

Страниц (1): [1]
 

1. Данил Банаев - 24 Ноября, 2011 - 14:29:55 - перейти к сообщению
Доброго времени суток всем.
Делаю маленькую базу для доски обхъявлений.

Существует объявление у него есть идентификатор и прочие атрибуты, включая имя категории и имя раздела.

Существует справочник с категориями, 2 категории могу быть с одинаковыми именами, но должны быть в разных разделах.

В таблице с разделами имя раздела должно быть уникальным

Все ли правильно?

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE parts(
  2.         name VARCHAR(20) NOT NULL,
  3.         description TEXT NOT NULL,
  4.         CONSTRAINT pkIdParts PRIMARY KEY(name)
  5. );
  6. CREATE TABLE category(
  7.         name VARCHAR(20) NOT NULL,
  8.         part VARCHAR(20) NOT NULL,
  9.         CONSTRAINT pkIdCat PRIMARY KEY(name,part),
  10.         CONSTRAINT fkCatagoryPart FOREIGN KEY(part)
  11.                 REFERENCES parts(name)
  12. );
  13. CREATE TABLE ads(
  14.         id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  15.         name VARCHAR(20) NOT NULL,
  16.         text TEXT NOT NULL,
  17.         cat VARCHAR(20) NOT NULL,
  18.         part VARCHAR(20) NOT NULL,
  19.         email VARCHAR(20) NOT NULL,
  20.         fio VARCHAR(50) NOT NULL,
  21.         CONSTRAINT pkIdAds PRIMARY KEY(id),
  22.         CONSTRAINT fkAdsCat FOREIGN KEY(cat,part)
  23.                 REFERENCES category(name,part)
  24. );


Далее я вывожу разделы с категориями, тоже хотелось узнать все ли правильно?

PHP:
скопировать код в буфер обмена
  1. $obj=new Board();
  2. $sql="SELECT name FROM parts";
  3. $parts=$obj->assocArrayQuery($sql);
  4. foreach($parts as $part){
  5.         echo "<u><b>".$part["name"]."</b></u><br>";
  6.         $sql="SELECT name FROM category WHERE part='{$part["name"]}'";
  7.         $category=$obj->assocArrayQuery($sql);
  8.         foreach($category as $cat){
  9.                 echo $cat["name"]."<br>";
  10.         }
  11. }
2. DlTA - 24 Ноября, 2011 - 14:42:28 - перейти к сообщению
не экономно
по правилам нормализации объявлению не желательно содержать все имя раздела в котором оно находится, более того выборка по тексту очень тормозявая штука, корректней будет использвать вместо имени категории ссылку на категорию в таблице "справочная по категориям"
3. Данил Банаев - 24 Ноября, 2011 - 14:51:10 - перейти к сообщению
не знаю как из таблицы объявлений исключить раздел, не нарушая связей.
про справочную по категориям можно поподробней?

 

Powered by ExBB FM 1.0 RC1