Я использую код POST JSON для сбора данных из базы данных, все результаты имеют только одно значение (это правильно), однако есть только один столбец, который должен показывать более одного значения, но показывает только первое. Что мне нужно изменить в моем коде, чтобы получить этот список вместо результата первой строки?

Я PCRNo один запрос MYSQL, связывающий три базы данных с одинаковым идентификатором PCRNo , первые две базы данных tPCR и tcomplement должны иметь только один результат, а третья должна получить больше результатов, поскольку мы можем иметь больше строк с одинаковым идентификатором.

Это мой JavaScript

 {amp}lt;script{amp}gt; $(document).ready(function(){ $('#table').on('click', '.fetch_data', function(){ var pcr_number = $(this).attr('id'); $.ajax({ url:'fetch.php', method:'post', data:{pcr_number:pcr_number}, dataType:"json", success:function(data){ $('#PCR').val(data.PCRNo); $('#PCC').val(data.PCC); $('#PCR_Creation').val(data.Creation_Date); $('#PCR_Status').val(data.Stage); $('#Required_Completion').val(data.Required_Completion); $('#description').val(data.Name); $('#Comments').val(data.Comments); $('#originator').val(data.Creator); $('#change_type').val(data.Category); $('#product_type').val(data.Product); $('#req_dept').val(data.Department); $('#flow').val(data.Flow_Start_Date); $('#own').val(data.Owning_Site); $('#impacted').val(data.Impacted_Site); $('#approval').val(data.Meeting_Status); $('#review').val(data.Review_Date); $('#cat').val(data.Cat); $('#cost').val(data.Cost); $('#labor').val(data.Labour); $('#volume').val(data.Volume); $('#request').val(data.Request); $('#justification').val(data.Justification); $('#PCNlist').val(data.PCNNo); $('#monitor').val(data.Monitor); $('#env').val(data.Environment); $('#trial').val(data.Trial); $('#resp').val(data.Responsible); $('#deadline').val(data.Deadline); $('#dataModal').modal('show'); } }); }); $(document).on('click', '#update', function(){ var pcr_number = document.getElementById("PCR").value; var Comments= document.getElementById("Comments").value; var approval= document.getElementById("approval").value; var review= document.getElementById("review").value; var cat= document.getElementById("cat").value; var monitor= document.getElementById("monitor").value; var env= document.getElementById("env").value; var trial= document.getElementById("trial").value; var resp= document.getElementById("resp").value; var deadline= document.getElementById("deadline").value; var PCC = document.getElementById("PCC").value; $.ajax({ url:"edit.php", method:"POST", data:{pcr_number:pcr_number, Comments:Comments, PCC:PCC, approval:approval, review:review, cat:cat, monitor:monitor, env:env, trial:trial, resp:resp, deadline:deadline}, dataType:"text", success:function(data) { alert('PCR Information Updated'); } }); }); }); {amp}lt;/script{amp}gt; 

это мой fetch.php

 {amp}lt;?php $SelectedPCRNo = $_POST['pcr_number']; if(isset($_POST['pcr_number'])) { $output = ''; $hostname = "localhost"; $username = "root"; $password = ""; $databaseName = "change_management"; $dbConnected = @mysqli_connect($hostname, $username, $password); $dbSelected = @mysqli_select_db($databaseName,$dbConnected); $dbSuccess = true; if ($dbConnected) { if ($dbSelected) { echo "DB connection FAILED{amp}lt;br /{amp}gt;{amp}lt;br /{amp}gt;"; $dbSuccess = false; } } else { echo "MySQL connection FAILED{amp}lt;br /{amp}gt;{amp}lt;br /{amp}gt;"; $dbSuccess = false; } $sql = mysqli_query($dbConnected, "SELECT * FROM change_management.tPCR INNER JOIN change_management.tcomplement ON change_management.tPCR.PCRNo = change_management.tcomplement.PCRNo INNER JOIN change_management.tPCN ON change_management.tPCR.PCRNo = change_management.tPCN.PCRNo WHERE tPCR.PCRNo = '".$_POST['pcr_number']."'"); $row = mysqli_fetch_array($sql); echo json_encode($row); } ?{amp}gt; 

У меня нет проблем с результатами, и таблица заполнена ОК, только список #PCNlist должен быть заполнен значениями всех строк, с #PCNlist он связан, и теперь просто приходит только одно значение, только первая строка. Есть ли способ привести весь PCNlist, только изменив какой-то код в fetch.php?

Если я вас правильно понял, таблица tPCN может содержать несколько строк, связанных с каждым номером PCR. И вы хотите получить все эти строки и вернуть их в свой JSON.

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

 $output = []; $stmt = $dbConnected-{amp}gt;prepare("SELECT * FROM change_management.tPCR INNER JOIN change_management.tcomplement ON change_management.tPCR.PCRNo = change_management.tcomplement.PCRNo WHERE tPCR.PCRNo = ?"); $stmt-{amp}gt;bind_param('s', $_POST['pcr_number']); $stmt-{amp}gt;execute(); $result = $stmt-{amp}gt;get_result(); //select a single row from the result and assign it as the output variable if ($row = $result-{amp}gt;fetch_assoc()) { $output = $row; } $stmt2 = $dbConnected-{amp}gt;prepare("SELECT * FROM change_management.tPCN WHERE PCRNo = ?"); $stmt2-{amp}gt;bind_param('s', $_POST['pcr_number']); $stmt2-{amp}gt;execute(); $result2 = $stmt2-{amp}gt;get_result(); $output["tPCN"] = array(); //create a new property to put the tPCN rows in //loop through all the tPCN rows and append them to the output while ($row2 = $result2-{amp}gt;fetch_assoc()) { $output["tPCN"][] = $row2; } echo json_encode($output); 

Это даст JSON с такой структурой:

 { "PCRNo": "ABC", "CreationDate": "2019-08-07", "Name": "AN Other", //...and all your other properties, until the new one: "tPCN": [ { "SomeProperty": "SomeValue", "SomeOtherProperty": "SomeOtherValue", }, { "SomeProperty": "SomeSecondValue", "SomeOtherProperty": "SomeOtherSecondValue", } ] } 

Затем вам нужно будет изменить свой код JavaScript, чтобы иметь возможность работать с новой структурой. Поскольку я не знаю точно, какие поля взяты из таблицы tPCN , я не могу дать вам пример для этого, но, надеюсь, ясно, что вам нужно будет tPCN массив и вывести один и тот же HTML для каждой найденной записи.


NB. Как вы видите, я переписал код запроса, чтобы использовать подготовленные операторы и параметризованные запросы, чтобы вы могли увидеть, как написать свой код безопасным способом в будущем.


PS У вас в коде «success» много кода, чтобы просто установить значения отдельных полей. Возможно, вы захотите использовать простой шаблонизатор JS, чтобы сделать его менее многословным и громоздким, и сгенерировать необходимый HTML-код с автоматически добавленными в него значениями в нужном месте. Но это отдельная проблема, только для удобства сопровождения вашего кода

Я добавил этот код в свою функцию ajax, чтобы получить только то, что мне было нужно, и он работает то, что опубликовал @ADyson.

 var PCN = data.tPCN; var i; var PCNList = ''; for (i = 0; i {amp}lt; PCN.length; i  ){ var PCNList = PCNList   PCN[i]['PCNNo']   ' - '   PCN[i]['Stage']; } $('#PCNlist').val(PCNList);