Как связать два столбца из таблицы с выбранным столбцом, показывающим только связанные результаты?Php, Javascript, Jquery - PullRequest
0 голосов
/ 07 февраля 2019

Сначала посмотрите мою базу данных.https://imgur.com/QWgN9UA Марка и модель важны только для вас.Когда пользователь выбирает марку «AJP», мне нужно только показать ему модель для этой марки.Пример при выборе из выпадающего списка AJP получить модель "PR4 125 ENDURO", PR4 125 SUPERMOTOAD "и" PR4 200 ". Я уже все думаю, но показываю пользователю все модели из базы данных, которые мне нужно показать только связанные с выбранной маркой. Я показываю свой кодЯ хотел бы, чтобы кто-нибудь помог мне без особых изменений существующего кода, если это возможно.

Мой код Php для получения Марки

public function get_marka_data() {

    $query = $this->db->query("
        SELECT DISTINCT mo.marka
        FROM " . DB_PREFIX .  "model mo
        GROUP BY mo.marka
    ")->rows;

    $data = array_map(function($row){
        return array('value'=>$row['marka'],'label'=>$row['marka']);
    }, $query);

    if (isset($this->request->server['HTTP_ORIGIN'])) {
        $this->response->addHeader('Access-Control-Allow-Origin: ' . $this->request->server['HTTP_ORIGIN']);
        $this->response->addHeader('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
        $this->response->addHeader('Access-Control-Max-Age: 1000');
        $this->response->addHeader('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
    }
    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($data));
}

Мой код для получения модели

public function get_model_data() {
    $query = $this->db->query("
        SELECT DISTINCT mo.model
        FROM " . DB_PREFIX .  "model mo
        GROUP BY mo.model
    ")->rows;

    $data = array_map(function($row){
        return array('value'=>$row['model'],'label'=>$row['model']);
    }, $query);

    if (isset($this->request->server['HTTP_ORIGIN'])) {
        $this->response->addHeader('Access-Control-Allow-Origin: ' . $this->request->server['HTTP_ORIGIN']);
        $this->response->addHeader('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
        $this->response->addHeader('Access-Control-Max-Age: 1000');
        $this->response->addHeader('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
    }
    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($data));
}

Мой код в файле шаблона для получения этих данных с помощью ajax

<script type="text/javascript">

   $.ajax({
    url: 'index.php?route=api/reifenmontage/get_marka_data',
   context: document.body,
   success: function(data) {
   const selectControl = $('#result');
     selectControl.html(data.map(ExtractData).join(''));
   }
   });

   function ExtractData(item) {
 return ` <option value="${item.value}">${item.label}</option>`;
}

</script>
<script type="text/javascript">

$.ajax({
url: 'index.php?route=api/reifenmontage/get_model_data',
context: document.body,
success: function(data) {
     const selectControl = $('#result2');
     selectControl.html(data.map(ExtractData).join(''));
   }
});

 </script>

И, наконец, мой шаблон html

       <div id="additionalRow"  class="row termin_row">
          <div class="col-sm-4 col-xs-12">
            <div class="row"><label>Marke und model</label></div>
          </div>
              <div class="col-xs-12 col-sm-3" style="margin-right:30px;">
                <div class="row">
                 <select class="form-control"  id="result">
                  </select>
             </div>
         </div>
         <div class="col-xs-12 col-sm-4">
             <div class="row">
               <select class="form-control"  id="result2">
             </select>
          </div>
               </div> 
        </div>

1 Ответ

0 голосов
/ 07 февраля 2019

Проблема в запросе, вместо GROUP BY ... используйте WHERE m.marka = '', передайте марку в скрипт.

Сначала визуализируйте метки на странице, когда какой-то маркавыбрано отправить запрос на сервер (сначала добавьте первый параметр в функцию get_marka_data ($ marka)) с этим запросом

SELECT DISTINCT mo.marka
FROM " . DB_PREFIX .  "model mo
WHERE mo.marka = " . $marka

Когда вы получите ответ, отобразите его на странице в каком-нибудь выпадающем списке

Не забудьте проверить !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...