Я переделал ваш php-код, чтобы вы могли получить желаемый результат.
Вместо строк assignind, возвращаемых из запроса mysql, создайте ассоциативный массив в соответствии с вашим требованием, а затем преобразуйте его в json
<?php
$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = ""; /* Password */
$dbname = "mydb"; /* Database name */
$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
$res_arr = array();
$query = '
SELECT
c.id,
c.category_name,
c.buyer_userid,
p.id,
p.product_name,
p.buyer_userid,
p.category_id,
s.items_id,
s.item_name,
s.quantity
FROM `categorys` c
INNER JOIN `product` p ON c.id=p.category_id
INNER JOIN `sales` s ON p.id=s.product_id
ORDER BY c.id';
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_array($result)){
$res['id'] = $row[0];
$res['cat_name'] = $row[1];
$res['catbuy_userid'] = $row[2];
$res['products_info']['id'] = $row[3];
$res['products_info']['productid'] = $row[4];
$res['products_info']['product_name'] = $row[5];
$res['products_info']['buyer_userid'] = $row[6];
$res['products_info']['sales_info']['items_id'] = $row[7];
$res['products_info']['sales_info']['items_name'] = $row[8];
$res['products_info']['sales_info']['buyer_userid'] = $row[6];
$res['products_info']['sales_info']['quantity'] = $row[9];
$res_arr[] = $res;
}
}
echo json_encode($res_arr);
?>
Добавьте файл Global.asax к своему веб-сайту, и в событии Session_End, Вы удаляете пользователя из своего HashTable.
protected void Session_End(Object sender, EventArgs e)
{
// Remove user from HashTable
}
Можно использовать событие конца сессии global.asax для удаления неожиданно разъединенного пользователя:
void Session_End(Object sender, EventArgs E) {
// Clean up session resources
}
но остерегайтесь, сессия не заканчивается, когда пользователь закрывает свой браузер или свою потерю соединения. Это заканчивается когда достигнутый тайм-аут сессии.
Событие Session_End не стреляет, когда браузер закрывается, это стреляет, когда сервер не получил запрос от пользователя в определенном человеке времени (значением по умолчанию 20 минут). Это означает, что, если Вы используете Session_End для удаления пользователей, они будут оставаться в чате в течение 20 минут после того, как они закрыли браузер.
Я предлагаю, чтобы Вы сохранили время последнего запроса в пользовательском объекте. Тем путем можно определить, насколько активный пользователь, и как, вероятно, случается так, что пользователь оставил чат. Можно, например, показать любому пользователю, который ничего не делал в течение двух минут как неактивного.
Можно также позволить приложению чата периодически опрашивать сервер (если Вы уже не делаете этого). Это обновило бы в прошлый раз запроса в объекте и поддержало бы пользователя, пока окно чата открыто.
Можно использовать onunload событие в браузере для отправления запроса выхода из системы к серверу, когда пользователь оставляет страницу. Это, конечно, только работает, если у пользователя все еще есть сетевая возможность соединения. onunload событие также инициировано при перезагрузке страницы таким образом, необходимо было бы отслеживать то, почему событие инициировано для использования его.