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 » » Работа с СУБД » Не могу сообразить

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

1. V2oD2o - 26 Марта, 2013 - 12:21:37 - перейти к сообщению
Не понял

Получаем ID товара, расколупываем его полные данные из нескольких таблиц:

PHP:
скопировать код в буфер обмена
  1. $query="SELECT `wheel_vendor`.`vendor_id`,
  2.                 `wheel_vendor`.`vendor_url`,
  3.                 `wheel_vendor`.`vendor_name`,
  4.                 `wheel_model`.`model_id`,
  5.                 `wheel_model`.`model_url`,
  6.                 `wheel_model`.`model_name`,
  7.                 `wheel_model_size`.`width` AS `p_width`,
  8.                 `wheel_model_size`.`radius` AS `p_radius`,
  9.                 `wheel_model_size`.`pcd_first` AS `pcd_1`,
  10.                 `wheel_model_size`.`pcd_second` AS `pcd_2`,
  11.                 `wheel_model_size`.`dia` AS `p_dia`,
  12.                 `wheel_model_size`.`et` AS `p_et`
  13.         FROM `wheel_model_size`
  14.                 INNER JOIN `wheel_model` ON `wheel_model_size`.`model_id`=`wheel_model`.`model_id`
  15.                 INNER JOIN `wheel_vendor` ON `wheel_model`.`vendor_id`=`wheel_vendor`.`vendor_id`
  16.         WHERE `size_id`='".$fullmodel_id."'";



Ищем цену по детальным данным товара:
PHP:
скопировать код в буфер обмена
  1. $query="SELECT `cost` FROM `price_wheels`
  2.         WHERE `width`='".substr_lastsymbol($width)."'
  3.                 AND `pcd_1`='".substr_lastsymbol($pcd_1)."'
  4.                 AND `pcd_2`='".substr_lastsymbol($pcd_2)."'
  5.                 AND `dia`='".substr_lastsymbol($dia)."'
  6.                 AND `et`='".substr_lastsymbol($et)."'
  7.                 AND `radius`='".$radius."'
  8.                 AND `vendor`='".$vendor."'
  9.                 AND `fullname` LIKE '%".$model."%'";


а как одним запросом задолбится сразу и по полному описанию и еще цену вытащить?

Несколько раз можно входить INNER'ом в одну и ту же таблицу по разным полям?
INNER JOIN `price_wheels` ON `wheel_model_size`.`pcd_1`=`price_wheels`.`pcd_1`
INNER JOIN `price_wheels` ON `wheel_model_size`.`pcd_2`=`price_wheels`.`pcd_2`
INNER JOIN `price_wheels` ON `wheel_model_size`.`dia`=`price_wheels`.`dia`
INNER JOIN `price_wheels` ON `wheel_model_size`.`et`=`price_wheels`.`et`

???

просто нет возможности сейчас попробовать..
2. caballero - 26 Марта, 2013 - 12:31:53 - перейти к сообщению
Цитата:
Несколько раз можно входить INNER'ом в одну и ту же таблицу по разным полям?

можно, только у таблицы алиасы разные должны быть
3. V2oD2o - 26 Марта, 2013 - 12:34:30 - перейти к сообщению
Причем надо как то сделать чтоб этот select выдавал результат даже если цены - нет
4. caballero - 26 Марта, 2013 - 12:36:40 - перейти к сообщению
left join
5. V2oD2o - 26 Марта, 2013 - 12:39:43 - перейти к сообщению
А не бывает что то вроде?

PHP:
скопировать код в буфер обмена
  1. $query="SELECT `wheel_vendor`.`vendor_id`,
  2.                 `wheel_vendor`.`vendor_url`,
  3.                 `wheel_vendor`.`vendor_name`,
  4.                 `wheel_model`.`model_id`,
  5.                 `wheel_model`.`model_url`,
  6.                 `wheel_model`.`model_name`,
  7.                 `wheel_model_size`.`width` AS `p_width`,
  8.                 `wheel_model_size`.`radius` AS `p_radius`,
  9.                 `wheel_model_size`.`pcd_first` AS `pcd_1`,
  10.                 `wheel_model_size`.`pcd_second` AS `pcd_2`
  11.                 `cost` IN (
  12.                         SELECT `cost` FROM `price_wheels`
  13.                            WHERE `width`='".substr_lastsymbol($width)."'
  14.                            AND `pcd_1`='".substr_lastsymbol($pcd_1)."'
  15.                 .....................
  16.                             AND `fullname` LIKE '%".$model."%'
  17.                 ) AS `p_cost`
  18.  
6. imya - 26 Марта, 2013 - 13:52:39 - перейти к сообщению
Почему не бывает? Подзапрос в запросе...
7. LIME - 26 Марта, 2013 - 14:01:35 - перейти к сообщению
не бывает
IN только в клаузуле
8. V2oD2o - 26 Марта, 2013 - 14:50:50 - перейти к сообщению
уж больно лагает, надо что то думать..

по запросу находится в среднем 80-100 позиций, а в цикле искать цену на них - это просто дикость..
База малюсенькая ~120 тысяч позиций, а некоторые запросы выполняются >3..4 секунд
9. LIME - 26 Марта, 2013 - 15:09:53 - перейти к сообщению
индексы стоят?
10. V2oD2o - 27 Марта, 2013 - 10:11:57 - перейти к сообщению
LIME пишет:
индексы стоят?


Нет, дай почитать?
вся халупа в том что я даже отсортировать по цене не могу..
11. LIME - 27 Марта, 2013 - 10:13:31 - перейти к сообщению
http://www.php.su/mysql/manual/?...ge=MySQL_indexes

 

Powered by ExBB FM 1.0 RC1