SQL-запрос

#1 5 января 2016 в 21:20
Здравствуйте!

Кто разбирается в синтаксе SQL, помогите исправить ошибку.

Фреймворк Yii, ошибка:

  1. CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND i.is_main=1' at line 5
Строка, в которой ошибка синтаксиса:

  1. WHERE a.id IN".$apartmentArr." AND i.is_main=1 ORDER BY a.date_created DESC";
Весь код файла:

  1. <?php
  2.  
  3. class HotDealsPaidService extends PaidServices{
  4.  
  5. public static function getHotDeals(){
  6.  
  7. $apartmentArr = '';
  8. $apartmentPaid = ApartmentPaid::model()->findAll();
  9.  
  10. /*
  11.   $apartmentPaid = ApartmentPaid::model()->findAllByAttributes(array(
  12.   'paid_id' => PaidServices::ID_HOT_OFFER,
  13.   ));
  14. */
  15. $today = date('Y-m-d');
  16. foreach($apartmentPaid as $offer){
  17. if(GetPaidService::checkPaidService($offer->apartment_id, PaidServices::ID_HOT_OFFER) && $today <= substr($offer->date_end,0,10) && $today >= substr($offer->date_start,0,10) ){
  18. $apartmentArr .= $offer->apartment_id.',';
  19. }
  20. }
  21.  
  22. $apartmentArr = '('.substr($apartmentArr, 0, -1).')';
  23.  
  24. $sql = " SELECT a.id, a.type,a.price, a.city_id, i.file_name_modified, a.date_created, c.name_ru, a.title_".Yii::app()->language." AS title
  25. FROM {{apartment}} a
  26. INNER JOIN {{apartment_city}} c ON c.id = a.city_id
  27. INNER JOIN {{images}} i ON i.id_object = a.id
  28. WHERE a.id IN".$apartmentArr." AND i.is_main=1 ORDER BY a.date_created DESC";
  29.  
  30. $result = Yii::app()->db->createCommand($sql)->queryAll(true);
  31.  
  32. $i=0;
  33. foreach ($result as $apartment){
  34. $result[$i]['type'] = Apartment::getNameByType($apartment['type']);
  35. $result[$i]['file_name_modified'] = '/uploads/objects/'.$apartment['id'].'/modified/full_'.$apartment['file_name_modified'];
  36. $i++;
  37. }
  38.  
  39. return $result;
  40. }
  41. }
  42.  
  43. ?>
#2 5 января 2016 в 22:57

Фреймворк Yii

SpideR-KOSS
может спросить об этом у спецов на форуме Yii?
#3 6 января 2016 в 23:22


Ошибка из за закрывающей скобки в строке 22

  1. $apartmentArr = '('.substr($apartmentArr, 0, -1).')';
Как $apartmentArr записан в базе данных?

Виктор

Есть только записи такого вида "LIKE '%apartment%'".

Именно упоминания об apartmentArr нет.

Таблицы называются oc_apartament_название.
#4 7 января 2016 в 00:21
Скорее всего в $apartmentArr просто ничего нет, кроме скобок. Никаких проверок $apartmentPaid же нет. Кто вообще писал этот код?
#5 7 января 2016 в 12:05


Скорее всего в $apartmentArr просто ничего нет, кроме скобок. Никаких проверок $apartmentPaid же нет. Кто вообще писал этот код?

lokanaft
Программист, который пропал.

Код работал, до определенного момента.
#6 7 января 2016 в 12:41
До момента, пока работало это условие:
  1. if(GetPaidService::checkPaidService($offer->apartment_id, PaidServices::ID_HOT_OFFER) && $today <= substr($offer->date_end,0,10) && $today >= substr($offer->date_start,0,10) )
#7 9 января 2016 в 19:35


До момента, пока работало это условие:

  1. if(GetPaidService::checkPaidService($offer->apartment_id, PaidServices::ID_HOT_OFFER) && $today date_end,0,10) && $today >= substr($offer->date_start,0,10) )

lokanaft

Честно говоря не силен в PHP пока.

Т.е код работал до определенного времени, даты?
#8 9 января 2016 в 19:48
Да, пока были офферы определённые, теперь их нет и ваш весь код должен возвращать пустой результат.
Например:
  1. 21 if(!$apartmentArr){return array();}
#9 11 января 2016 в 12:23


Да, пока были офферы определённые, теперь их нет и ваш весь код должен возвращать пустой результат.
Например:

  1. 21 if(!$apartmentArr){return array();}

lokanaft

Большое спасибо! Код сработал. smile
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.