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]   

> Без описания
Avensis
Отправлено: 19 Августа, 2015 - 15:30:48
Post Id


Новичок


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


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




Всем привет! Есть таблица:

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `cat` (
  2.   `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(220) NOT NULL DEFAULT '',
  4.   `parent_id` int(10) NOT NULL DEFAULT '0',
  5.   PRIMARY KEY  (`id`)
  6. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Помогите пожалуйста составить запрос, чтобы когда parent_id = 0, то выводились так-же все подкатегории которые ей принадлежат?
 
 Top
and_07
Отправлено: 19 Августа, 2015 - 18:03:41
Post Id


Гость


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


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




думаю в mysql запросом так не сделать

(в нем нет рекурсивных запросов вроде)
 
 Top
Avensis
Отправлено: 19 Августа, 2015 - 19:36:49
Post Id


Новичок


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


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




у меня есть запрос который выводит товар:
CODE (SQL):
скопировать код в буфер обмена
  1. $sql = $mysqli->query("SELECT * FROM `product` WHERE `cat`='$id';");

как мне сделать чтобы если категория имеет parent_id =0 , то выводились товары с подкатегорий?
(Добавление)
никто не знает? Растерялся

(Отредактировано автором: 19 Августа, 2015 - 19:40:21)

 
 Top
3d_killer
Отправлено: 19 Августа, 2015 - 21:04:45
Post Id



Участник


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


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




используй LEFT JOIN во вторую таблицу
 
My status
 Top
Avensis
Отправлено: 19 Августа, 2015 - 21:10:34
Post Id


Новичок


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


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




можно чуть подробней? Мне нужно сделать так:
Допустим есть категория:
Платья (id = 1 parent id 0)
Офисные (id = 2 parent id 1)
Повседневные (id = 3 parent id 1)

Если человек зашел в категорию Платья, то ему выводились товары и из категорий Офисные, Повседневные. Как это можно реазизовать?
 
 Top
3d_killer
Отправлено: 19 Августа, 2015 - 21:13:08
Post Id



Участник


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


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




с такой структурой только - рекурсивно собрать ID дочерних категорий, потом в запросе использовать IN, если не будет у этих дочерних еще дочерних то можно без рекурсии
обычно только рекурсией так как подкатегорий может быть много
CODE (htmlphp):
скопировать код в буфер обмена
  1. НАСОСЫ -> С префильтром -> IML -> Серия Big Discovery -> ТОВАРЫ

(Отредактировано автором: 19 Августа, 2015 - 21:17:45)

 
My status
 Top
Avensis
Отправлено: 19 Августа, 2015 - 21:39:44
Post Id


Новичок


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


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




у этих дочерних не будет еще дочерних.. можно как-то без рекурсии обойтись?
 
 Top
andrewkard
Отправлено: 19 Августа, 2015 - 22:03:10
Post Id


Участник


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


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




Avensis
Сделайте первый запрос, если parent id = 0, то второй запрос:
...WHERE id = 1 OR parent id = 1
 
 Top
3d_killer
Отправлено: 19 Августа, 2015 - 22:05:04
Post Id



Участник


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


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




Сомнительно, что в одежде не будет, но если так то:

известна ID категории родительской, то есть $id

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT product.* FROM product
  2. LEFT JOIN cat ON
  3. cat.id=product.cat
  4. WHERE cat.parent_id=$id GROUP BY product.id


вроде так
Прикреплено изображение (Нажмите для увеличения)
adm1.jpg
 
My status
 Top
Avensis
Отправлено: 20 Августа, 2015 - 16:56:35
Post Id


Новичок


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


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




спасибо всем!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB