auctionhouse - 拍卖行物品存储表
基于 AzerothCore Characters 数据库 · 拍卖行在售物品全量数据表
📋 表概述
auctionhouse 表存储所有在拍卖行挂单的物品信息,包括卖家、物品GUID、起拍价、一口价、保证金、当前竞价等完整交易信息。这是魔兽经济系统的核心交易表之一。
- 拍卖物品全量存储
- 联盟/部落/中立分厅
- 竞拍/一口价交易
- 物品唯一性约束
主键为 id,同时有唯一索引
item_guid 确保每件物品只能挂单一次。houseid 区分联盟(2)/部落(6)/中立(7)拍卖行。📊 表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | int UNSIGNED | 0 | 拍卖单号(主键) |
| houseid | tinyint UNSIGNED | 7 | 拍卖行ID(2=联盟,6=部落,7=中立) |
| itemguid | int UNSIGNED | 0 | 拍卖物品GUID(唯一索引→item_instance.guid) |
| itemowner | int UNSIGNED | 0 | 卖家角色GUID |
| buyoutprice | int UNSIGNED | 0 | 一口价(铜币单位) |
| time | int UNSIGNED | 0 | 拍卖到期时间(Unix时间戳) |
| buyguid | int UNSIGNED | 0 | 当前竞价者GUID(0=无人竞价) |
| lastbid | int UNSIGNED | 0 | 当前最高竞价(铜币单位) |
| startbid | int UNSIGNED | 0 | 起拍价(铜币单位) |
| deposit | int UNSIGNED | 0 | 挂单保证金(铜币单位) |
🔍 重要字段详解
🏛️ houseid - 拍卖行分区
详细说明:区分不同阵营/地区的拍卖行。
- 2 = 联盟拍卖行(铁炉堡、暴风城等)
- 6 = 部落拍卖行(奥格瑞玛、幽暗城等)
- 7 = 中立拍卖行(加基森、藏宝海湾)
- 默认值为7(中立),需确保正确设置
💰 buyoutprice / startbid / lastbid
详细说明:三个价格字段,全部以铜币为单位。
- startbid - 起拍价,竞价不能低于此值
- buyoutprice - 一口价,买家可以直接购买的价格(0=不支持一口价)
- lastbid - 当前最高竞价(0=尚未有人出价)
- buyoutprice=0 表示该物品仅支持竞拍模式
⏰ time - 拍卖到期
详细说明:Unix时间戳,拍卖到期后物品归还卖家。
- 通常为12/24/48小时(可配置)
- 到期后如果有人竞拍,物品归竞价者
- 无人竞拍则退还给卖家
💡 SQL示例
示例1:查询联盟拍卖行当前在售物品
SELECT
ah.id, ah.itemguid,
ah.startbid / 10000 AS bid_gold,
ah.buyoutprice / 10000 AS buyout_gold,
FROM_UNIXTIME(ah.time) AS expire_time
FROM auctionhouse ah
WHERE ah.houseid = 2
ORDER BY ah.time;示例2:查询即将到期的拍卖(1小时内)
SELECT
id, itemguid, houseid,
buyoutprice / 10000 AS gold,
FROM_UNIXTIME(time) AS expire_time
FROM auctionhouse
WHERE time < UNIX_TIMESTAMP() + 3600
AND time > UNIX_TIMESTAMP()
ORDER BY time;❓ 常见问题
Q1: 为什么物品无法在拍卖行出售?
检查 itemguid 是否已被唯一索引占用(一件物品不能同时在多个拍卖出现)。检查拍卖行是否属于正确阵营(houseid)。
Q2: 保证金(deposit)如何计算?
由服务器根据物品的售价和拍卖时长自动计算(通常为一口价的百分比)。挂单成功时不退还,拍卖成交后退还。