如何做内部连接多行返回php

时间:2015-09-29 23:30:32

标签: php mysql json

我有两个表,其中一个表有多个行,参考另一个表。

questions_table:

id | value_question
---------
1  | "first question"
2  | "second question"

responses_table:

id | question_id| value_response | is_true
-------------------------------------------
1  | 1          | SFU            | true
2  | 1          | UBC            | false
3  | 2          | BU             | true
4  | 2          | RI             | false

我知道从PHP中的json中的questions_table返回每一行的最佳做法是:

[
  { "value_question": "first question",
    "responses": [
      {"value_response": "SFU", "is_true": "true"},
      {"value_response": "UBC", "is_true": "false"}
    ],
  },
  { "value_question": "first question",
    "responses": [
      {"value_response": "SFU", "is_true": "true"},
      {"value_response": "UBC", "is_true": "false"}
    ],
  },
]

我只是尝试在MYSQL中进行,但我只能对字符串进行排序。

SELECT 
     value_question,
     CONCAT('[',GROUP_CONCAT('{value_response:',responses.value_response,', is_true:',responses.is_true,'}'),']')'responses' 
FROM questions
INNER JOIN responses ON 
     questions.id = responses.question_id
GROUP BY id_question

我不知道在PHP或MYSQL中执行此操作有什么好处 如果您需要更多详细信息,请告诉我。

对不起我的英语,我是法国人:)

谢谢我知道如何使用json_encode,我的问题更多:这是拥有所述结构的最佳请求。

php:

    include 'connect_db.php';

    $sql= *the request*

    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $json = json_encode($result);

    echo $json;

1 个答案:

答案 0 :(得分:0)

请使用以下代码。
对于数据库连接,请使用mysqli_connect函数中的mysql数据库服务器值替换 我使用了mysql查询和php mysqli,因为我不太了解PDO。 首先在变量中接受请求,然后运行mysql连接查询。迭代mysql获取的结果并构建一个数组。然后最后做json_encode。

$con = mysqli_connect('db_host', 'db_username', 'db_password', 'db_name'); // please replace with your mysql server values.

$value_question = 'first question'; // your *the request*

$value_question = $con->real_escape_string($value_question); // escape values

$query =  " SELECT `responses_table`.`value_response` , `responses_table`.`is_true` 
            FROM `questions_table` 
            INNER JOIN `responses_table` 
            ON `questions_table`.`id` = `responses_table`.`question_id` 
            WHERE `questions_table`.`value_question` = '$value_question' "; 

$result = $con->query($query);

while( $row = $result->fetch_assoc() ){ // build up a responses array
    $responses[] = array( 'value_response' => $row['value_response'] , 
                            'is_true'       => $row['is_true'])  ;
}
$response = array('value_question' => $value_question ,
                    'responses' => $responses );

echo json_encode($response); // your json response