2016-10-07 13 views
5

Teraz pracuję na uzyskanie odpowiedzi JSON z danymi w poniższej tabeliOdpowiedź JSON Query

enter image description here

Korzystając następujące zapytanie:

$sql = "select * from subject where subject_name = 'maths'"; 

$result = mysqli_query($conn,$sql); 

    while($row = mysqli_fetch_array($result)) 
    { 
    $data = new stdClass(); 
    $subject_name = $row['subject_name']; 
    $unit = $row['unit']; 
    $unit_name = $row['unit_name']; 

    $data->subject_name=$subject_name; 

    $emparray[] = array('unit' => $unit, 
         'unit_name' => $unit_name, 
         ); 

    $data->units=$emparray; 
    } 

echo json_encode(array($data)); 

mogę dostać odpowiedź Jsona jako:

enter image description here

Teraz to, co chcę była dla ogólnych przedmiotów bez użycia klauzuli WHERE (gdzie subject_name = 'matematyka')

My wymagane Json o/p jest jak poniżej:

enter image description here

+1

Prawdopodobnie trzeba zrobić wielu zapytań (najpierw dowiedzieć ile badani nie są, to pętla każdy przedmiot) lub logiki z PHP (elementy grupy o tej samej nazwie podmiotu). –

Odpowiedz

5

Możesz pogrupować wyniki według subject_name do twojej tablicy PHP według następującego kodu.

$sql = "select * from users"; 

LUB

$sql = "select subject_name,unit,unit_name from users"; 

kod PHP

$result = mysqli_query($conn,$sql); 
$data = array(); 

function search($subject){ 
    global $data; 
    foreach ($data as $key => $value) { 
    if (isset($value['subject_name']) && $value['subject_name']==$subject) { 
     return $key; 
     } 
    } 
return false; 
} 

while($row = mysqli_fetch_assoc($result)){ 
    $res = search($row['subject_name']); 
    if ($res===false) { 
    array_push($data, array(
      'subject_name' =>$row['subject_name'], 
      'units'=>array($row) 
     ) 
    ); 
    }else{ 
    array_push($data[$res]['units'], $row); 
    } 
} 

echo json_encode($data); 

Teraz można uzyskać format JSON z góry kodu.

+0

Witaj, twój kod daje tablicę jak "angielski", ale potrzebuję z kluczem jak "subject_name: angielski". Prosimy o sprawdzenie wymaganego json o/p w moim pytającym partnerze. możesz mi wyjaśnić, jak to zrobić? –

+0

Ahh! Tak, oczywiście! Poczekaj proszę. Aktualizuję kod dla ciebie! @RajaGopal –

+0

Oczekiwanie na aktualizację kumpla –

3

Możesz wypróbować ten kod:

$sql = "select * from subject; 

    $result = mysqli_query($conn,$sql); 

     while($query_row= mysqli_fetch_array($result)) 
     { 

    if($query_row['subject_name'] == 'English'){ 
         $timeslot = array(
          "unit"  => $query_row['unit'], 
          "unit_name" => $query_row['unit_name'] 
         ); 

         $subjects = addToArray($subjects, $timeslot['subject_name']); 

        } else if($query_row['subject_name'] == 'Maths'){ 
         $timeslot = array(
         "unit"  => $query_row['unit'], 
          "unit_name" => $query_row['unit_name'] 
         ); 

         $subjects = addToArray($subjects, $timeslot['subject_name']); 


        } else if($query_row['subject_name'] == 'Science'){ 
         $timeslot = array(
          "unit"  => $query_row['unit'], 
          "unit_name" => $query_row['unit_name'] 
         ); 
     $subjects = addToArray($subjects, $timeslot['subject_name']); 
        } 

    } 
+0

Witaj, czego chcę nie było według nazwy podmiotu w kodzie. Nazwa tematu może się zmienić w przyszłości, więc chcę wziąć nazwę podmiotu w db nie bezpośrednio w kodzie –

1

Mój kod nie może być dokładnie poprawne, ale nadal może pomóc

$outer_sql = "SELECT DISTINCT subject_name * from subject; 
    $outer_result = mysqli_query($conn,$outer_sql); 
    while($outer_query_row= mysqli_fetch_array($outer_result)) 
    { 
$sql = "select * from subject where subject_name = '".$outer_query_row['subject_name']."'"; 

$result = mysqli_query($conn,$sql); 
    while($row = mysqli_fetch_array($result)) 
{ 
$data = new stdClass(); 
$subject_name = $row['subject_name']; 
$unit = $row['unit']; 
$unit_name = $row['unit_name']; 

$data->subject_name=$subject_name; 

$emparray[] = array('unit' => $unit, 
        'unit_name' => $unit_name, 
        ); 

$data->units=$emparray; 
} 


    } 
echo json_encode(array($data)); 
3

Spróbuj:

$sql = " select subject_name, group_concat(unit) unit, group_concat(unit_name) unit_name 
      from subject group by subject_name "; 

$result = mysqli_query($conn, $sql); 

$data = []; 
while($row = mysqli_fetch_array($result)) 
{ 
    $subject_name = $row['subject_name']; 
    $units = explode(',', $row['unit']); 
    $unit_names = explode(',', $row['unit_name']); 

    $subject = []; 
    $subject['subject_name'] = $subject_name; 

    $emparray = []; 
    for ($i=0; $i < count($units); $i++) { 
     $emparray[] = array('unit' => $units[$i], 'unit_name' => $unit_names[$i]); 
    } 

    $subject['units'] = $emparray; 
    $data[] = $subject; 
} 

echo json_encode($data); 
Powiązane problemy