Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Тройной запрос
nugle  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



sphinxCorp.
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2755
Пользователь №: 23462
На форуме: 6 лет, 5 месяцев, 6 дней
Карма: 96

Трезвый :
4 года, 11 месяцев, 28 дней


Добрый вечер)
есть три таблицы
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.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса