MYSQL 2 запроса объеденить в 1

12
PN
На сайте с 01.05.2008
Offline
113
4331

Есть запрос, в котором достается ДЕРЕВО значений, которое потом повтроно запрашивается.

1:

$sql = "SELECT cat_tree,cat_id FROM `catalog` WHERE `cat_id`='$id' $typesql $lsql $filter LIMIT 1"; 

2:

$sql = "SELECT cv.cat_val_id, cv.cat_val_name, cv.cat_val_title, cv.cat_val_title_inpage, cv.cat_val_lang FROM catalog_value AS cv

WHERE cat_val_id IN($treeids)";

Можно ли как-то сразу доставть ДЕРЕВО и запросить это ДЕРЕВО КАТЕГОРИЙ в MYSQL? И стоит ли оно того?

E
На сайте с 31.03.2008
Offline
85
#1

Я не совсем понял вопрос, но попробуйте так

SELECT * from table1 WHERE id IN (Select id FROM table2 WHERE parent_id=1)
Dreammaker
На сайте с 20.04.2006
Offline
569
#2

erynok, по сути это не устранит проблему.

Headlesz
На сайте с 18.05.2009
Offline
152
#3

я даже и не понял в чем проблема?

Изучаем п. 4.4 правил форума
E
На сайте с 31.03.2008
Offline
85
#4
Dreammaker:
erynok, по сути это не устранит проблему.

Тогда можно пример структуры таблиц.

И что нужно выбрать.

А то в примере не понятно, что с чем джоинится

Dreammaker
На сайте с 20.04.2006
Offline
569
#5

erynok, у ТС проблема, c тем что поддеревья выбираются рекурсией, а этих поддеревьев дофика.

Хотя структуру и я хотел бы глянуть.

PN
На сайте с 01.05.2008
Offline
113
#6

да структура простая.

Cat_tree - тут значения категорий. Типа 1,2,15,31.

Я запрашиваю сначала эти значения, что бы потом запросить IN(X).

X- вытащеное значение Cat_tree для нужной мне категории. Т.е. по сути по идее вопрос относится к примитивным.

Напрмиер если запросили страницу с рубрикой_id=15, то запрашивается Cat_tree для каталога 15, потом второй запрос запрашивает IN(1,11,13) потом рисуется дерево до нужной категории....

п.с. на всяк пж

catalog

cat_id cat_lang cat_pid cat_rubrika cat_tree cat_level cat_type cat_access cat_show

Prosto_niki добавил 20.09.2010 в 16:26

erynok:
Я не совсем понял вопрос, но попробуйте так
SELECT * from table1 WHERE id IN (Select id FROM table2 WHERE parent_id=1)

Спасибо. Подошло. Я не знал раньше что в MYSQL так можно. Теперь поправлю кучу запросов.

Prosto_niki добавил 20.09.2010 в 16:27

Dreammaker:
erynok, у ТС проблема, c тем что поддеревья выбираются рекурсией, а этих поддеревьев дофика.

Хотя структуру и я хотел бы глянуть.

По той ветке где 800 категорий, то отдельно. Тут немного другой вопросик был :) Спасибо ребята.

Dreammaker
На сайте с 20.04.2006
Offline
569
#7
Prosto_niki:
Спасибо. Подошло.

Если я не ошибаюсь, то IN() по сути делает те же запросы, единственно, что это делается в самом mysql, а не дёргается из пхп.

C
На сайте с 04.02.2005
Offline
291
#8

вот тут статья по поводу иерархических запросов

http://club.shelek.ru/viewart.php?id=327

PN
На сайте с 01.05.2008
Offline
113
#9
Dreammaker:
Если я не ошибаюсь, то IN() по сути делает те же запросы, единственно, что это делается в самом mysql, а не дёргается из пхп.

Впервые слышу такое.. Хотя все может быть.

В одних рекомендация читал что MYSQL мол "не язык прогармирования" и лучше там ничего умного не делать, а в других редакциях наоборот, пишут что через мускул будет значительно быстрее и меньше нагрузки. В моем случае IN помогает уйти от Х запрсоов... Но если действительно это множественный запрос и не желаетелен то можно разбить explode(, .. ) значения... И сделать выражение типа " WHERE cat_id='3' OR cat_id='2' OR cat_id='1' ", но стоит ли оно того? К тому же доставть значение ДЕРЕВА - это доп. запрос получится. (то как раз от чего я отказался сделав как написали выше)

Robin_Bad
На сайте с 24.12.2007
Offline
85
#10

Prosto_niki, запросы "...WHERE cat_id IN(1,2,3)" и "...WHERE cat_id=1 OR cat_id=2 OR cat_id=3" тождественны с точки зрения MySQL.

По вопросу выдёргивания дерева категорий из базы - дёргайте вы его целиком ОДНИМ запросом и стройте дальше из него хоть дерево, хоть куст, хоть казино со шлюхами и блэкджеком средствами PHP. Плюс не забывайте про кэширование.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий