[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Тройной запрос
nugle
Добрый вечер)
есть три таблицы
product
subcategory
category
Мне нужно:
1)Чтобы вначале у товара выбиралась подкатегория, потом
2)На основе к какой подкатегории принадлежит, выбрать категорию
Делаю так
$query_cat = mysqlQuery('select * from '.SPH_DBPREFIX.'product where id_subcategory = "'.$GET['id'].'"');
$row_cat = mysql_fetch_assoc($query_cat);
$query_cat = mysqlQuery('select * from '.SPH_DBPREFIX.'subcategory where id = "'.$row_cat['id_subcategory'].'"');
$row_cat = mysql_fetch_assoc($query_cat);
$query_cat = mysqlQuery('select * from '.SPH_DBPREFIX.'category where id = "'.$row_cat['id_category'].'"');
$row_cat = mysql_fetch_assoc($query_cat);

Возможно ли как то объединить или упростить запрос?



Спустя 13 минут, 32 секунды (17.12.2011 - 18:48) Игорь_Vasinsky написал(а):
JOIN mysql - почитай.

Спустя 19 часов, 1 минута, 46 секунд (18.12.2011 - 13:50) SlavaFr написал(а):
минимальное описание JOIN-ов
http://phpforum.ru/index.php?showtopic=374...t=0#entry800164

Спустя 4 часа, 56 минут, 54 секунды (18.12.2011 - 18:46) nugle написал(а):
я объядинил два запроса и получилось так
$query_cat = mysqlQuery('select * from '.SPH_DBPREFIX.'product inner join '.SPH_DBPREFIX.'subcategory on
'
.SPH_DBPREFIX.'product.id_subcategory = '.SPH_DBPREFIX.'subcategory.id where '.SPH_DBPREFIX.'product.id_subcategory = "'.$GET['id'].'"');
$row_cat = mysql_fetch_assoc($query_cat);
$query_cat = mysqlQuery('select * from '.SPH_DBPREFIX.'category where id = "'.$row_cat['id_category'].'"');
$row_cat = mysql_fetch_assoc($query_cat);

еще упростить можно как нибудь?

Спустя 19 минут, 51 секунда (18.12.2011 - 19:06) caballero написал(а):
зачем писать inner лнл и так по дефолту
а вообще убрать нафиг join и связать таблицы в обычном WHERE
ну и алиасы таблицам при таких длинных именах не помешали бы

и чего третью таблицу не привязал сразу

Спустя 3 минуты, 10 секунд (18.12.2011 - 19:09) nugle написал(а):
caballero
а как третью через join привезать?

Спустя 13 минут, 28 секунд (18.12.2011 - 19:23) caballero написал(а):
точно также как и вторую
но если хочешь сократить запрос убери Join вообще и свяжи таблицы в условии WHERE

Спустя 1 минута, 3 секунды (18.12.2011 - 19:24) Игорь_Vasinsky написал(а):
также wink.gif

Спустя 18 минут, 21 секунда (18.12.2011 - 19:42) inpost написал(а):
nugle
Учимся оформлять красиво, и читать так проще.
SELECT *
FROM `table` AS `t1`
LEFT JOIN `table2` AS `t2` ON `t2`.`cell` = `t1`.`cell`
LEFT JOIN `table3` AS `t3` ON `t3`.`cell` = `t1`.`cell` // можно t2.cell
WHERE `t1`.`cell` = 'bebebe'

Спустя 1 час, 1 минута, 40 секунд (18.12.2011 - 20:44) nugle написал(а):
Спасибо всем, все прекрасно работает

Спустя 2 часа, 55 минут, 50 секунд (18.12.2011 - 23:40) sergeiss написал(а):
Цитата (caballero @ 18.12.2011 - 20:23)
но если хочешь сократить запрос убери Join вообще и свяжи таблицы в условии WHERE

Позволь уточнить... Хотя такое связывание формально и не использует JOIN, но все равно это JOIN smile.gif Просто другая форма записи, не более того.

Кусочек из хэлпа по Мускулю:
Свернутый текст
The evaluation of multi-way natural joins differs in a very important way that affects the result of NATURAL or USING joins and that can require query rewriting. Suppose that you have three tables t1(a,B ), t2(c,B ), and t3(a,c ) that each have one row: t1(1,2), t2(10,2), and t3(7,10). Suppose also that you have this NATURAL JOIN on the three tables:

SELECT ... FROM t1 NATURAL JOIN t2 NATURAL JOIN t3;

Previously, the left operand of the second join was considered to be t2, whereas it should be the nested join (t1 NATURAL JOIN t2). As a result, the columns of t3 are checked for common columns only in t2, and, if t3 has common columns with t1, these columns are not used as equi-join columns. Thus, previously, the preceding query was transformed to the following equi-join:

SELECT ... FROM t1, t2, t3
WHERE t1.b = t2.b AND t2.c = t3.c;

That join is missing one more equi-join predicate (t1.a = t3.a). As a result, it produces one row, not the empty result that it should. The correct equivalent query is this:

SELECT ... FROM t1, t2, t3
WHERE t1.b = t2.b AND t2.c = t3.c AND t1.a = t3.a;

If you require the same query result in current versions of MySQL as in older versions, rewrite the natural join as the first equi-join.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.