mysql: получение данных из двух таблиц зависит от идентификатора первой таблицы и результата в json - PullRequest
0 голосов
/ 28 января 2019

У меня есть 2 таблицы, я хочу получить данные из первой, зависит от "id", а данные из второй зависят от "gid", который совпадает с "id" из первой таблицы в JSON.

Пример:

First Table: 
- - - - - - -
id  name
1   Aaron
2   Caleb
3   Albert
4   Ethan

Second Table:
- - - - - - -
id  gid image
1   1   http://.......image1.jpg
2   1   http://.......image2.jpg
3   2   http://.......image3.jpg
4   3   http://.......image4.jpg
5   3   http://.......image5.jpg
6   3   http://.......image6.jpg

Я хочу получить результат, когда я запрашиваю id = 1, Примерно так:

"names": [
    {

     "id": 1,

     "name": "Aaron"
          "images":[
             {
                "id" :1
                "url":http://.......image1.jpg
             },
             {
                "id" :2
                "url":http://.......image2.jpg
             }
       ]
   }
]

Это часть моего кода:

$SqlInfo = "Select * from tabel1 where id='$id'";

$obj = json_decode($_GET["x"], false);
$stmt = $con->prepare($SqlInfo);
$stmt->bind_param("ss", $obj->table, $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode(array(
    'status' => 'Ok',
    'name' => $outp
    ));

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

Ответы [ 2 ]

0 голосов
/ 29 января 2019

сначала вы можете использовать внутреннее объединение для объединения результатов из обеих таблиц

$sql = "select 
           t2.gid,
           t2.id,
           t2.image,
           ti.name 
        from 
            second_table as t2
        join first_table as t1 on t2.gid = t1.id 
        where id='$id'           
       ";

$obj = json_decode($_GET["x"], false);
$stmt = $con->prepare($SqlInfo);
$stmt->bind_param("ss", $obj->table, $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(PDO::FETCH_ASSOC);
/*PDO::FETCH_ASSOC return result in associative array */
$arr = array();
if(!empty($outp)){

    $i =1;/* this is used so that first table data can only be feed to array once*/

    foreach($outp as $val){
        if($i ==1){
            $arr['id'] = $val['gid'];
            $arr['name'] = $val['name'];
        }
        $tmp = array();
        $tmp['id'] = $val['gid'];
        $tmp['url'] = $val['image'];
        $arr['images'][] = $tmp;
        $i++;
        /*increment $i so that we cannot enter $val['name'] repeatedly*/ 
    }
}
$json_arr = array('status' => 'Ok','name' => $arr);
echo json_encode($json_arr);
0 голосов
/ 28 января 2019

Во-первых, вам нужен результат первой таблицы для декодирования в массив.

$first_table = array(
    '0'=> ['id'=> 1, 'name' =>'Aaron' ],
    '1'=> ['id'=> 2, 'name' =>'Caleb' ],
    '2'=> ['id'=> 3, 'name' =>'Albert'],
    '3'=> ['id'=> 4, 'name' =>'Ethan' ]
    );

//create function to retrieve images by ID from Second Table 
function get_images($id)
{
$SqlInfo = "Select id, image as url from tabel2 where gid='$id'";
$stmt = $con->prepare($SqlInfo);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);

    return $outp;
}   

// create a new object
$new_array=array();

//Loop first table
foreach ( $first_table as $key => $value){

$new_array[$value['name']]  = [
                                'name' => $value['name'],
                                'id' => $value['id'],
                                'images' => get_images($value['id']) // Get images from function
                               ];

}

$final = json_encode($new_array);

Это не было проверено, но решение должно быть в этом направлении

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