You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Member ID在PHP/MySQL中展示指定会员的订阅次数及起止时间

针对指定会员ID展示订阅信息的修改方案

一、调整SQL查询逻辑

原来的查询是统计所有会员的订阅次数,现在需要过滤指定会员ID,同时取出订阅的起止时间。假设你的订阅表名为subscriptions,会员ID字段为member_id,订阅开始时间字段为subscription_start,结束时间字段为subscription_end,可以用以下两种查询方式:

方式1:统计该会员总订阅次数+每条订阅的起止时间

SELECT 
    s.member_id,
    (SELECT COUNT(*) FROM subscriptions WHERE member_id = s.member_id) AS total_subscriptions,
    s.subscription_start,
    s.subscription_end
FROM subscriptions s
WHERE s.member_id = ?

方式2:按订阅记录分组统计(适合同一会员有多条独立订阅的场景)

SELECT 
    member_id,
    COUNT(*) AS subscription_count,
    subscription_start,
    subscription_end
FROM subscriptions
WHERE member_id = ?
GROUP BY member_id, subscription_start, subscription_end

二、修改PHP代码实现

1. 获取指定的会员ID

通过URL参数传递(比如yourpage.php?member_id=1001),并做基础校验:

if (!isset($_GET['member_id']) || empty($_GET['member_id'])) {
    echo "请指定要查询的会员ID";
    exit;
}
$member_id = $_GET['member_id'];

2. 使用预处理语句执行查询(防SQL注入)

// 假设已建立数据库连接$conn
$stmt = $conn->prepare("SELECT s.member_id, (SELECT COUNT(*) FROM subscriptions WHERE member_id = s.member_id) AS total_subscriptions, s.subscription_start, s.subscription_end FROM subscriptions s WHERE s.member_id = ?");
// 若member_id是字符串类型,将"i"改为"s"
$stmt->bind_param("i", $member_id);
$stmt->execute();
$result = $stmt->get_result();

3. 输出查询结果

if ($result->num_rows > 0) {
    echo "<h3>会员ID {$member_id} 的订阅详情</h3>";
    echo "<table border='1' cellpadding='8'>";
    echo "<tr><th>会员ID</th><th>总订阅次数</th><th>订阅开始时间</th><th>订阅结束时间</th></tr>";
    while ($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>{$row['member_id']}</td>";
        echo "<td>{$row['total_subscriptions']}</td>";
        echo "<td>{$row['subscription_start']}</td>";
        echo "<td>{$row['subscription_end']}</td>";
        echo "</tr>";
    }
    echo "</table>";
} else {
    echo "会员ID {$member_id} 暂无订阅记录";
}

// 清理资源
$stmt->close();
$conn->close();

注意事项

  • 确保SQL中的字段名和数据库实际字段完全匹配(比如截图中数据库字段可能是memberid、startdate这类,需对应修改)
  • 必须使用预处理语句,避免SQL注入风险
  • 如需格式化时间显示,可使用MySQL的DATE_FORMAT函数,例如DATE_FORMAT(subscription_start, '%Y-%m-%d %H:%i') AS formatted_start

内容的提问来源于stack exchange,提问作者newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:45:48