我正在尝试弄清楚如何进行查询以获取某个列表中排名靠前的用户的数据...稍后我将使用 php 进行静态统计和图表,但我想要的是获取每个列表的总和用户,但我发现这很困难,因为在一个月内,一个用户可以在数据库上进行多次注册,我想对其进行管理,然后获取具有更多事件的前十名用户(在这种情况下,每月的数量更多)。
示例
user_id quantity date kind
user1 23 17/03/18 free
user1 3 17/03/18 charge
user2 5 17/03/18 free
user2 5 17/03/18 free
user2 8 18/03/18 free
user3 9 19/03/18 free
user3 1 20/03/18 free
user3 1 20/03/18 charge
user3 3 20/03/18 charge
user3 5 20/03/18 charge
最佳答案
您可以将数组存储在数据库中,方法是序列化它们,将它们插入数据库,然后在从数据库检索时反序列化它们。
PHP 中的数组可以是多维的,这意味着数组可以存储数组等等。此外,数组可以是关系数组,这意味着您可以存储值并为每个值提供标识符(“键”)。
知道了这一点,你就可以做这样的事情:
$con = new mysqli($host, $username, $password, $db_name);
$stmt = $con->prepare('SELECT * FROM users WHERE user_id=?;');
$stmt->bind_param('s', $id);
$stmt->execute();
$result = $stmt->get_result()->fetch_array();
if ($array_data = unserialize($result['data'])) {
echo 'The quantity related to ', $result['name'], ' is ', $array_data['quantity'];
} else {
echo 'It seems that there\'s nothing related to ', $result['name'], ' yet. Adding a field now.';
$array_data = array(
'quantity' => 23,
'date' => date('l jS \of F Y h:i:s A'),
'kind' => 'free'
);
}
$array_data = serialize($array_data);
$stmt2 = $con->prepare('UPDATE users SET data=? WHERE user_id=?;');
$stmt2->bind_param('ss', $array_data, $id);
$stmt2->execute();
上面的示例非常抽象,但您可以了解如何使用序列化和数组。 MySQL 没有“数组”类型,但您可以对 PHP 中的几乎所有对象使用序列化和反序列化,将它们存储在数据库中。
注意MySQL中序列化字段的类型应该是“BLOB”。
关于php - 使用mysql(数据太多)获取不同用户事件的统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50635213/