Error Number: 1054 Unknown column 'check' in 'on clause' codeigniter

363
15 мая 2017, 00:24

Помогите пожалуйста, столкнулся с такой проблемой! Есть такой же запрос с отелями, но с ними все хорошо и не каких ошибок! А вот с недвижимостью проблема такого рода!

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+'">Подробнее &gt;</a>'
                            +'</div>'
                        +'</td>'
                    +'</tr>';                               
                    $('#tabl > tbody').append(strPost);
                }
            }
        });         
    }); 
Answer 1

В sql запросе во втором ON виден пробел после check

ON check -nedvizh.product_id=

Не в этом ли проблема?

Answer 2

У вас таблицы с названием через дефис, 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');
READ ALSO
Ошибка в JS ! Помогите разобраться

Ошибка в JS ! Помогите разобраться

На сайте была 1 форма , обрабатываемая в ajax , но понадобилось добавить вторую и думал что будет достаточно создать форму и дублировать скрипт...

376
Как получить в цикле значение элементов добавленных через jQuery?

Как получить в цикле значение элементов добавленных через jQuery?

Пытаюсь победить календарь от дяди БитриксаУ него в коде каждый день имеет дата-аттрибут

354
Scroll при перезагрузке страницы

Scroll при перезагрузке страницы

Если человек перезагружает страницу, когда он прокрутил например до середины, то класс не добавляется, хотя он уже выше 1px от верха страницы,...

384