Как напечатать набор результатов, связанный только с одной ячейкой в HTML-таблице

89
9

Моя БД состоит из двух таблиц Пользователь и Друзья

    У User много Friends

Мне нужно показать следующий вид таблицы

enter image description here

Я запросил обе таблицы с INNER JOIN следующим образом

SELECT usr.FirstName, usr.Phone, usr.Email, fri.FirstName AS friendName
FROM User AS usr
INNER JOIN Friends AS fri
WHERE fri.idUser = usr.idUser

Поскольку у многих Friends есть User, Friends могут контролировать, сколько результатов будет возвращено.

Выход:

{
"FirstName" : "jose", "Phone" : 123, "Email": "jose@jose.com", "friendName" : "Pedro",
"FirstName" : "jose", "Phone" : 123, "Email": "jose@jose.com", "friendName" : "Juan", // Same user, with another friend
}

Результирующий набор верный, но я не могу понять, как его распечатать, как табличное представление, показанное ранее из Javascript или любого кода программирования языка, который запросил этот запрос

Есть идеи, как это решить?

спросил(а) 2019-05-16T05:26:00+03:00 8 месяцев, 2 недели назад
2
Решение
68

Чтобы уточнить, с HTML вы можете просто использовать неупорядоченные списки <ul> для столбца Friends

<table border="1">
<thead>
<tr>
<th>#</th>
<th>First Name</th>
<th>Phone</th>
<th>E-Mail</th>
<th>Friends</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Jose</td>
<td>123</td>
<td>jose@jose.com</td>
<td>
<ul>
<li>Pedro</li>
<li>Juan</li>
</ul>
</td>
</tr>
<tr>
<td>2</td>
<td>Felipe</td>
<td>456</td>
<td>felipe@felipe.com</td>
<td>
<ul>
<li>Carlos</li>
<li>Jose</li>
</ul>
</td>
</tr>
</tbody>
</table>

Чтобы использовать Javascript, предположим, что у вас есть массив users, вы можете зациклить его и сгенерировать <table> следующим образом:

let users = [
{"userId": 1, "FirstName": "jose", "Phone": 123, "Email": "jose@jose.com", "friendName": "Pedro"},
{"userId": 1, "FirstName": "jose", "Phone": 123, "Email": "jose@jose.com", "friendName": "Juan"},
{"userId": 2, "FirstName": "felipe", "Phone": 456, "Email": "felipe@felipe.com", "friendName": "Carlos"},
{"userId": 2, "FirstName": "felipe", "Phone": 456, "Email": "felipe@felipe.com", "friendName": "Jose"}
];

// To combine friends of the same user in an array at property friendNames
let usersWithFriends = {};
for (let user of users) {
let index = 'user' + user.userId;
if (typeof usersWithFriends[index] === 'undefined') {
usersWithFriends[index] = user;
} else {
if (typeof usersWithFriends[index].friendNames === 'undefined') {
usersWithFriends[index].friendNames = [usersWithFriends[index].friendName];
delete usersWithFriends[index].friendName;
}

usersWithFriends[index].friendNames.push(user.friendName);
}
}

let tbodyHTML = '';
// For the # column
let no = 1;

for (let user in usersWithFriends) {
let userDetails;
if (usersWithFriends.hasOwnProperty(user)) {
userDetails = usersWithFriends[user];
}
tbodyHTML += '<tr>';
tbodyHTML += '<td>${no++}</td>';
tbodyHTML += '<td>${userDetails.FirstName}</td>';
tbodyHTML += '<td>${userDetails.Phone}</td>';
tbodyHTML += '<td>${userDetails.Email}</td>';
tbodyHTML += '<td><ul>';
for (let friendName of userDetails.friendNames) {
tbodyHTML += '<li>${friendName}</li>';
}
tbodyHTML += '</td></ul>';
tbodyHTML += '</tr>';
}

document.getElementsByTagName('tbody')[0].innerHTML = tbodyHTML;

<table border="1">
<thead>
<tr>
<th>#</th>
<th>First Name</th>
<th>Phone</th>
<th>E-Mail</th>
<th>Friends</th>
</tr>
</thead>
<tbody></tbody>
</table>

ответил(а) 2019-05-16T06:28:00+03:00 8 месяцев, 2 недели назад
Еще 1 ответ
34

Хорошо, я вижу тег, которым вы помечаете этот вопрос как mysql, поэтому очень просто реализовать вывод html при использовании команды mysql с конфигурацией --html. как показано ниже:

mysql -u username -p password -D database --html -e"select * from your_table_name limit 10" > data_result.html

Когда вы откроете вышеупомянутый HTML файл data_result.html в браузере, вы получите data_result.html стиль печати. enter image description here

ответил(а) 2019-05-16T05:46:00+03:00 8 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема