Помогите пожалуйста, столкнулся с такой проблемой! Есть такой же запрос с отелями, но с ними все хорошо и не каких ошибок! А вот с недвижимостью проблема такого рода!
A Database Error Occurred
Error Number: 1054
Unknown column 'check' in 'on clause'
SELECT * FROM (catalog) JOIN nedvizhimost ON
nedvizhimost.product_id=catalog.product_id JOIN
check-nedvizh ON check-nedvizh.product_id=catalog.product_id
WHERE id_district LIKE '%%' AND id_city LIKE '%%' AND
id_type_nedvizh LIKE '%%' AND time_zaezda LIKE '%%' AND
time_viezda LIKE '%%' AND count_guest LIKE '%%' AND
id_interval_price LIKE '%%' AND count_root LIKE '%%' AND kosher
LIKE '%0%' AND osobenniy LIKE '%0%' ORDER BY name asc
Filename: /var/www/mishatest/data/www/mrdt.ru/models/catalog.php
Line Number: 42
Код модели:
function search_nedvizhimost($nedvizh){
$this->db->select('*');
$this->db->from($this->catalog_table);
$this->db->join($this->nedvizhimost_table, $this->nedvizhimost_table.'.product_id='.$this->catalog_table.'.product_id');
$this->db->join($this->check_nedvizh_table, $this->check_nedvizh_table.'.product_id='.$this->catalog_table.'.product_id');
$this->db->order_by('name','asc');
$array = array( 'id_district' => $nedvizh['district'], 'id_city' => $nedvizh['city'], 'id_type_nedvizh' => $nedvizh['type_nedvizh'],
'time_zaezda' => $nedvizh['ot_hidden'], 'time_viezda' => $nedvizh['do_hidden'], 'count_guest' => $nedvizh['count_guest'],
'id_interval_price' => $nedvizh['interval_price'], 'count_root' => $nedvizh['count_root'], 'kosher' => $nedvizh['kosher'],
'osobenniy' => $nedvizh['osobenniy'] );
$this->db->like($array);
$query = $this->db->get(); <--- 42 строка
return $result = $query->result_array();
}
Переменные:
protected $name_nedvizhimost_table = 'name-nedvizhimost';
protected $nedvizhimost_table = 'nedvizhimost';
protected $check_name_nedvizh_table = 'name-check-nedvizh';
protected $check_nedvizh_table = 'check-nedvizh';
И сам скрипт обработки запроса
$('body').on('click', '#search_appartament', function(event) {
event.preventDefault();
$.ajax({
url: "/index/index/",
type: "post",
data: $('#form_appartament').serialize(),
global: false,
dataType: "json",
response:'text',
cache: false,
async: false,
error: function(req, err){ console.log('my message' + err); },
success: function(data) {
//$('#del').remove();
alert(data);
for ( var i=0; i<data.length; i++ ) {
var img = '';
for ( var j=0; j<data[i].id_level; j++ ) {
if ( j<5 ) { img = img + '<img src="/images/star.png" alt="Star" />'; } else {
img = img + '<strong style="font-size:18px;"> DLX</strong>'; break; }
}
var strPost = '<tr>'
+'<td>'
+'<a href="/catalog/nedvizhimost/'+data[i].alias+'">'
+'<img src="/images/catalog/tmb/'+data[i].preview+'" alt="" width="193" height="147" />'
+'</a>'
+'</td>'
+'<td valign="top" style="padding-left: 16px;">'
+'<div class="ar_levels">'+img+'</div>'
+'<div class="ar_title">'
+'<a href="/catalog/nedvizhimost/'+data[i].alias+'">'+data[i].name+'</a>'
+'</div>'
+'<div class="ar_desc">'+data[i].textarea.substr(0,232)+'...</div>'
+'<div class="ar_more">'
+'<a href="/catalog/nedvizhimost/'+data[i].alias+'">Подробнее ></a>'
+'</div>'
+'</td>'
+'</tr>';
$('#tabl > tbody').append(strPost);
}
}
});
});
В sql запросе во втором ON виден пробел после check
ON check -nedvizh.product_id=
Не в этом ли проблема?
У вас таблицы с названием через дефис, MYSQL это не понимает такие названия без кавычек. Вот такое название таблицы, через нижнее подчеркивание MYSQL поймет:
SELECT * FROM check_ned;
А вот такой запрос
SELECT * FROM check-ned
Вызовет ошибку, но это можно исправить с помощью кавычек
SELECT * FROM `check-ned`
Я рекомендую вам именовать таблицы через нижнее подчеркивание, потому что это можно в какой-то степени считать общепринятой практикой во многих командах и это позволяет избежать подобных проблем.
Вернемся к вопросу, у вас ошибка в запросе:
`check-nedvizh` ON `check`-`nedvizh`
Видимо, это автоматическое приведение как-то срабатывает на подобное название и оно автоматический конвертируется.
Вероятно в билдере есть проблема, связанная с экранированием названий таблиц подобного плана и оно не учитывает данный символ и разбивает его на 2 части.
Можно попробовать в condition передавать уже названия таблиц заключенные в обратные кавычки, возможно это что-нибудь изменит, но не могу быть уверен, что это поможет. Вероятно, в лучшем случае необходимо искать обновление, или в худшем искать ошибку в самом билдере, а может использовать какой-нибудь прямой запрос к базе без билдера.
$this->db->join($this->nedvizhimost_table,
'`'.$this->nedvizhimost_table.'`.product_id='.$this->catalog_table.'.product_id');
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости