Объедините два поля в строку в JSON, используя PHP и MYSQL - PullRequest
0 голосов
/ 04 апреля 2020

Я хотел бы объединить два поля в базе данных MYSQL в одно для вывода в JSON, используя PHP. Запрос dr aws из двух таблиц:

Первая таблица выглядит как

comments
id|userid|comment
1|1|Agree
1|2|Disagree

Вторая таблица пользователей выглядит так:

users
id|username
1|Bob
2|Joe

Вот мой текущий код (урезанный):

$sql = "SELECT u.id,u.username,c.comment FROM comments `c` ";
$sql.= "LEFT JOIN users `u` ON c.userid = u.id 
$res = mysql_query($sql) or die(mysql_error());
//Note there is protection against sql injection and the actual parameterized query is way more complicated: I am simplifying here  

while($row = mysql_fetch_assoc($res)) {
    $comments[] = $row;
}
echo json_encode(array('comments'=>$comments));

Возвращает JSON, который выглядит следующим образом:

"comments":[{"id":"1","username":"Joe","comment":"Agree"},{"id":"2","username":"Bob","comment":"Disagree"}]

Я хотел бы создать объединить идентификатор и имя пользователя в одном поле чтобы получить что-то вроде:

"comments: [{"user": "1,Joe","comment":"Agree"},{"user":"2,Bob","comment":"Disagree"}]

Можно ли использовать concat? Буду признателен за любые предложения о том, как это сделать.

1 Ответ

3 голосов
/ 04 апреля 2020

Просто верните данные из запроса в нужной форме:

$sql = "SELECT CONCAT_WS(',', u.id, u.username) AS user,  c.comment FROM comments `c` ";
$sql.= "LEFT JOIN users `u` ON c.userid = u.id";

Вы также можете использовать CONCAT(u.id, ',', u.username) вместо CONCAT_WS; единственное отличие состоит в том, что CONCAT_WS игнорирует NULL значения, где CONCAT вернет NULL, если любое значение равно NULL. Разницу можно увидеть в этой демоверсии .

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