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 » PHP » Программирование на PHP » Неограниченная вложенность категорий, помогите с запросом

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

1. Avensis - 19 Августа, 2015 - 15:30:48 - перейти к сообщению
Всем привет! Есть таблица:

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, то выводились так-же все подкатегории которые ей принадлежат?
2. and_07 - 19 Августа, 2015 - 18:03:41 - перейти к сообщению
думаю в mysql запросом так не сделать

(в нем нет рекурсивных запросов вроде)
3. Avensis - 19 Августа, 2015 - 19:36:49 - перейти к сообщению
у меня есть запрос который выводит товар:
CODE (SQL):
скопировать код в буфер обмена
  1. $sql = $mysqli->query("SELECT * FROM `product` WHERE `cat`='$id';");

как мне сделать чтобы если категория имеет parent_id =0 , то выводились товары с подкатегорий?
(Добавление)
никто не знает? Растерялся
4. 3d_killer - 19 Августа, 2015 - 21:04:45 - перейти к сообщению
используй LEFT JOIN во вторую таблицу
5. Avensis - 19 Августа, 2015 - 21:10:34 - перейти к сообщению
можно чуть подробней? Мне нужно сделать так:
Допустим есть категория:
Платья (id = 1 parent id 0)
Офисные (id = 2 parent id 1)
Повседневные (id = 3 parent id 1)

Если человек зашел в категорию Платья, то ему выводились товары и из категорий Офисные, Повседневные. Как это можно реазизовать?
6. 3d_killer - 19 Августа, 2015 - 21:13:08 - перейти к сообщению
с такой структурой только - рекурсивно собрать ID дочерних категорий, потом в запросе использовать IN, если не будет у этих дочерних еще дочерних то можно без рекурсии
обычно только рекурсией так как подкатегорий может быть много
CODE (htmlphp):
скопировать код в буфер обмена
  1. НАСОСЫ -> С префильтром -> IML -> Серия Big Discovery -> ТОВАРЫ
7. Avensis - 19 Августа, 2015 - 21:39:44 - перейти к сообщению
у этих дочерних не будет еще дочерних.. можно как-то без рекурсии обойтись?
8. andrewkard - 19 Августа, 2015 - 22:03:10 - перейти к сообщению
Avensis
Сделайте первый запрос, если parent id = 0, то второй запрос:
...WHERE id = 1 OR parent id = 1
9. 3d_killer - 19 Августа, 2015 - 22:05:04 - перейти к сообщению
Сомнительно, что в одежде не будет, но если так то:

известна 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


вроде так
10. Avensis - 20 Августа, 2015 - 16:56:35 - перейти к сообщению
спасибо всем!

 

Powered by ExBB FM 1.0 RC1