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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Три таблицы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Сергей
Отправлено: 14 Сентября, 2007 - 16:16:10
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2007  


Помог: 0 раз(а)




Помогите. Проблема такая: есть 3 таблицы
cards таблица организаций
-id
-title
category таблица категорий
-id
-title
category_relations таблица связей
-id
-category_id
-card_id

Задача: собрать организации по категориям и вывести в виде каталога
Образование
Школа №654
Школа №42

Сфера услуг
Страховая компания "Макс"
Агенство недвижимости


Я пробовал такой запрос:
$query = 'SELECT category.title AS "category_title", cards.title AS "cards_title" FROM cards, category_relations,category WHERE cards.id = category_relations.card_id AND category.id=category_relations.category_id';
$data=query_array($query);
foreach($data as $row){
echo "<tr><td>".$row["category_title"]."</td><td>".$row["cards_title"]."</td></tr>";
}

получается следующие:
Образование Школа №654
Образование Школа №42
Сфера услуг Страховая компания "Макс"
Сфера услуг Агенство недвижимости
Как вывести в виде дерева? Подскажите.
 
 Top
evgenijj
Отправлено: 14 Сентября, 2007 - 16:37:40
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Мне кажется, одним запросом задачу не решить.

Можно сначала выбрать из БД все категории, и обрабатывая результат запроса циклом
while($ctg = mysql_fetch_array( $res ) ) { ... }
на каждой итерации делать запрос на выборку из БД организаций, входящих в эту категорию.

Или так: выбрать все категории одним запросом, и все организации - вторым. Потом пройти циклом foreach по массиву категорий, а во внутреннем цикле просматривать все элементы второго массива (организаций), чтобы выяснить, принадлежит ли текущая организация (внутренний цикл) текущей категории (внешний цикл).
 
 Top
valenok
Отправлено: 14 Сентября, 2007 - 17:08:31
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $cats = mysql_query("SELECT * FROM `category`");
  4. for($i=0;$i<mysql_num_rows($cats);$i++)
  5. {
  6.         $res = mysql_query("SELECT * FROM `cards` WHERE `cards.id` = `category_relations.card_id` AND
  7. `category_relations.category_id` = ".mysql_result($cats,$i,1));
  8.         echo "<b>".mysql_result($cats,$i,0)."</b><br/>n";
  9.         while($row = mysql_fetch_assoc($res)) echo "&nbsp;&nbsp;&nbsp;".$row['title']."<br />n";
  10.         echo "<br/>nn";
  11. }
  12.  


А зачем вам cat relationships? Можно в cards вписать поле category


-----
Truly yours, Sasha.
 
My status
 Top
Сергей
Отправлено: 18 Сентября, 2007 - 17:26:21
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2007  


Помог: 0 раз(а)




valenok пишет:

А зачем вам cat relationships? Можно в cards вписать поле category


На случай если одна организация относится сразу к двум категориям\n\n(Добавление)
спасибо, вот так работает:
PHP:
скопировать код в буфер обмена
  1.  
  2. $cats = mysql_query("SELECT * FROM category");
  3.  for($i=0;$i<mysql_num_rows($cats);$i++)
  4.  {
  5.  echo mysql_result($cats,$i,2)."<br/>";
  6.   $res = mysql_query("SELECT * FROM cards, category_relations WHERE cards.id = category_relations.card_id AND category_relations.category_id =".mysql_result($cats,$i,0));
  7.   while($row = mysql_fetch_assoc($res)) echo $row['title']."<br/>";
  8.   echo "<br/>";
  9. }
 
 Top
EuGen Администратор
Отправлено: 18 Сентября, 2007 - 18:46:16
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Вот вам 3 таблицы:
PHP:
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `organisations` (
  3.   `organisation_id` int(11) unsigned NOT NULL auto_increment,
  4.   `name` varchar(255) default NULL,
  5.   PRIMARY KEY  (`organisation_id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  7.  
  8. CREATE TABLE `categories` (
  9.   `category_id` int(11) unsigned NOT NULL auto_increment,
  10.   `name` varchar(255) default NULL,
  11.   PRIMARY KEY  (`category_id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  13.  
  14. CREATE TABLE `relations` (
  15.   `category_id` int(11) unsigned NOT NULL,
  16.   `organisation_id` int(11) unsigned NOT NULL
  17. ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  18.  

Вот вам запрос:
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT
  3.  o.name,
  4.  r0.category_id,
  5.  1 AS tname
  6. FROM
  7.  organisations AS o LEFT JOIN relations AS r0 USING(organisation_id)
  8. UNION ALL
  9. SELECT
  10.  c.name,
  11.  r1.category_id,
  12.  0 AS tname
  13. FROM
  14.  categories AS c LEFT JOIN relations AS r1 USING(category_id)
  15. GROUP BY c.name
  16. ORDER BY category_id,tname;
  17.  

Пример его использования:
PHP:
скопировать код в буфер обмена
  1.  
  2. $query=THIS_BIG_QUERY;
  3. $res=mysql_query($query);
  4. while($row=mysql_fetch_array($res))
  5.    echo($row[0]."\\n");
  6.  

И все одним запросом


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB