2016-12-15 5 views
0

У меня есть раскрывающийся список, который импортируется с данными из таблицы в базе данных. Выпадающие значения состоят из значения MR_ID, которое конкатенируется с именем MR_Name, которое расположено в другой таблице. В зависимости от того, что выбрано, я хочу отобразить таблицу, которая отображает необходимую информацию, которая коррелирует с тем, что было выбрано в раскрывающемся списке. Так, например, если в выпадающем списке выбрать «1 - Компания А», я хочу, чтобы значения Supp_ID (могут быть более 1 значения), которые коррелируют со значением «1 - Компания А», которое должно отображаться в таблице. Как я могу это сделать?Показать таблицу на основе выбора просадки

В таблице указаны только 2 столбца, MR_ID (это то, что отображается в выпадающем списке) и Supp_ID.

У меня было это раньше, но мне пришлось изменить свои запросы, чтобы использовать CTE, и это отбросило меня.

HTML Dropdown:

<!-- Form -->  
<form name="myForm" action=""> 

<!-- Dropdown List --> 
    <select name="master_dropdown" id="mr_id"> 

    <option selected value="select">Choose a MR_ID</option> 
     <?php foreach($users->fetchAll() as $user) { ?> 
      <option data-name="<?php echo $user['MR_ID'];?>"> 
       <?php echo $user ['MR_ID'];?> 
      </option> 
     <?php } ?> 
    </select> 
</form> 

Вот мои старые и новые запросы на моей главной странице (index.php) ...

// Old query on main page (index.php) 
$sql = "SELECT DISTINCT CAST(MR_ID AS INT) AS MR_ID FROM Stage_Rebate_Index"; 

// New query on main page (index.php) 
$sql = "WITH cte AS (
SELECT DISTINCT CONCAT(CAST(Stage_Rebate_Index.MR_ID AS INT),' - ', Stage_Rebate_Master.MR_Name) AS MR_ID 
    , Stage_Rebate_Index.MR_ID AS sort_column 
FROM Stage_Rebate_Index 
LEFT JOIN Stage_Rebate_Master 
ON Stage_Rebate_Master.MR_ID=Stage_Rebate_Index.MR_ID 
) 
SELECT MR_ID 
FROM 
    cte 
ORDER BY 
    sort_column;"; 

Вот мои старые и новые запросы на моем тесте -table.php страница

// Query that is used in ajax call (test-table.php) 
    $sql_one = "SELECT CAST(Supp_ID AS INT) AS Supp_ID, CAST(MR_ID AS INT) AS MR_ID FROM Stage_Rebate_Index WHERE MR_ID = '$mr_id'"; 

// Query that is used in ajax call (test-table.php) 
$sql_one = "WITH cte AS (
SELECT DISTINCT CONCAT(CAST(Stage_Rebate_Index.MR_ID AS INT),' - ', Stage_Rebate_Master.MR_Name) AS MR_ID 
    , Stage_Rebate_Index.MR_ID AS sort_column, CAST(Stage_Rebate_Index.Supp_ID as INT) AS Supp_ID 
FROM Stage_Rebate_Index 
LEFT JOIN Stage_Rebate_Master 
ON Stage_Rebate_Master.MR_ID=Stage_Rebate_Index.MR_ID 
) 
SELECT MR_ID, Supp_ID 
FROM 
    cte 
WHERE 
    MR_ID = '$mr_id' 
ORDER BY 
    sort_column;"; 

Это мой Аякс (index.js) вместе с линией коды, который приносит в значении $ _POST ...

// Reads what the user selects from the drop down list and displays table when a selection is made 
function updatetable(myForm) { 

    function show() { document.getElementById('index-table').style.display = 'block'; } 


    var selIndex = myForm.selectedIndex; 
    console.log(); 
    var selName = $("#mr_id option:selected").text(); 

// Ajax sends POST method to Stage_Rebate_Index table and pulls information based on drop down selection 

$.ajax ({ 
    url: "test-table.php", 
    method: "POST", //can be post or get, up to you 
    data: { 
     mr_id : selName 
    }, 
    beforeSend: function() { 
     //Might want to delete table and put a loading screen, otherwise ignore this 
    }, 
    success: function(data){ 
     $("#table_div").html(data); // table_div is the div you're going to put the table into, and 'data' is the table itself. 
    } 
}); 

} 

$ _POST метод принес на тест-Table.php ...

$mr_id = $_POST['mr_id']; 

тест-Table.php сценарий ...

<?php 
$host="xxxxxxxxxxxx"; 
$dbName="xxxxx"; 
$dbUser="xxxxxxxx"; 
$dbPass="xxxxxxxxxxxxxx"; 

$mr_id = $_POST['mr_id']; 

$dbh = new PDO("sqlsrv:server=".$host."; Database=".$dbName, $dbUser, $dbPass); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql_one = "WITH cte AS (
SELECT DISTINCT CONCAT(CAST(Stage_Rebate_Index.MR_ID AS INT),' - ', Stage_Rebate_Master.MR_Name) AS MR_ID 
    , Stage_Rebate_Index.MR_ID AS sort_column, CAST(Supp_ID as INT) AS Supp_ID 
FROM Stage_Rebate_Index 
LEFT JOIN Stage_Rebate_Master 
ON Stage_Rebate_Master.MR_ID=Stage_Rebate_Index.MR_ID 
) 
SELECT MR_ID, Supp_ID 
FROM 
    cte 
WHERE 
    MR_ID = '$mr_id' 
ORDER BY 
    sort_column;"; 


//$users = $dbh->query($sql); 
$users_one = $dbh->query($sql_one); 
?> 

<html> 
    <body> 

     <!-- Table --> 
<p> 
    <div id="table_div"> 
     <table border="1" id="index_table" class="ui-widget ui-widget-content"> 
      <thead> 
       <tr class="ui-widget-header"> 
       <td>MR ID</td> 
       <td>Supplier ID</td> 
       </tr> 
      </thead> 
      <?php foreach($users_one->fetchAll() as $supp) { ?> 
      <tr> 
       <td class="mr_id"><?php echo $supp['MR_ID'];?></td> 
       <td class="supp_id"><?php echo $supp['Supp_ID'];?></td> 
      </tr> 
      <?php } ?> 
     </table> 
    </div> 

    </body 
    </html 

ответ

0

Есть несколько способов что вы можете отладить это и дать немного больше информации о том, что именно происходит (смотря на разницу в наборах результатов, которые вы получали от предыдущих запросов и текущих запросов, а только запросов в изоляции). Было бы хорошо знать, будет ли ваш обновленный запрос просто возвращать пустой набор результатов или фактическую ошибку и т. Д.

Сверху, однако, я думаю, что может возникнуть проблема в вашем SQL в том, что вы пытаясь объединить в Int со строкой, здесь:

CONCAT(CAST(Stage_Rebate_Index.MR_ID AS INT),' - ', Stage_Rebate_Master.MR_Name) 

Я предполагаю, что MR_Name является VARCHAR, и поэтому я уверен, что одна из вещей, которые вы должны сделать, это бросить MR_ID как VARCHAR и не внутр.

В запросе могут быть и другие вещи, но было бы неплохо получить представление о том, каковы фактические результаты.

+0

MR_Name является «NVARCHAR» ... если я запускаю оба запроса в моей SQLPro Studio, с которой я работаю, оба раза он возвращает результаты, которые мне нужны – Rataiczak24

+0

И когда вы console.log переменную данных в вашем Ajax Функция onSuccess - регистрирует ли вы результаты, которых вы ожидали? – Sabir

+0

в консоли, он отображает HTML-код для таблицы, в котором значения должны быть основаны на моем выпадающем списке. – Rataiczak24

Смежные вопросы