Sqlite查询智能行与克隆表的数学关系?
好吧,这很难解释,但我会试试。Sqlite查询智能行与克隆表的数学关系?,sql,sqlite,math,Sql,Sqlite,Math,好吧,这很难解释,但我会试试。 买桌 ---------------------------------------------------------------------------------------------------------- id itemId amount price bought collected slot aborted playerHash 1 2607 4111 200600 0 0 0 0
买桌
----------------------------------------------------------------------------------------------------------
id itemId amount price bought collected slot aborted playerHash
1 2607 4111 200600 0 0 0 0 1020628
2 11335 1 0 0 0 3 1 1020628
3 2495 6546 5306 0 0 1 0 1020628
4 1127 101 58300 101 0 5 0 37763265
5 14479 1 107500 0 0 2 0 37763265
6 1 100 1 0 0 0 0 3 *simulate a problem Buy
销售台
----------------------------------------------------------------------------------------------------------
id itemId amount price sold collected slot aborted playerHash
1 8 8234 132950 7244 0 4 0 1020628
2 9 1980 132950 0 0 5 0 1020628
3 9 100 126300 0 0 2 0 1020628
4 3024 8888 10900 8888 0 0 0 37763265
5 1 100 1 1 0 0 0 1 *simulate a problem Sell
6 1 100 1 1 0 0 0 2 *simulate a problem Sell
比赛结果
----------------------------------------------------------------------------------------------------------
S.itemId S.amount S.price S.sold S.collected S.slot S.playerHash B.itemId B.amount B.price B.bought B.collected B.slot B.playerHash
123 2 444 1 0 0 15431 123 34535 448 3 0 1 3455
123 2 444 1 0 0 15431 123 7567 444 333 0 3 7651
*simulated result rows of wrong data
1 100 1 1 0 0 1 1 100 1 0 0 0 3
1 100 1 1 0 0 2 1 100 1 0 0 0 3
我试图进行的查询必须将相同itemId的买家与相同itemId的卖家匹配起来。必须确保买方和卖方都没有在他们的项目上中止布尔设置。 也要处理那些支付比卖家首先想要的更多的买家。
还要检查以确保卖家正在销售的金额尚未售出。
还要检查以确保买家购买的金额尚未购买。
以及每批处理100次销售。
下面的查询在大多数情况下都很有效。
我试图在查询中解决的问题是使其在数学方面更加智能。
假设销售台有playerHash 1和playerHash 2
itemId 8,金额为100,playerHash列出的销售额为1。
itemId 8,金额为100,playerHash列出的销售额为1,假设为2。
现在有一位买家叫playerHash 3,他购买的物品ID为8,金额为100。
现在的问题是
playerHash1无法出售其全部100份itemId 8,因为他只剩下99份(售出1份)
playerHash2无法出售其全部100份itemId 8,因为他只剩下99份(售出1份)相同的故事
现在查询应该返回
playerHash 1出售给playerHash 3买家,行末有一个名为willBuyAmount的新列,将其设置为99
下一行应该知道playerHash 1已售出=100(不更新数据库,也不更改前一行的售出列)
Dsplay将playerHash 2出售给playerHash 3买家,并在行尾添加一个名为willBuyAmount的新coulmn,将其设置为1。
playerHash2现在应该仍然能够知道它还有98个剩余(售出1)+1个临时位置idk可能会克隆表?
对于相同itemId和>=价格的未来买家,应该能够从playerHash2购买该商品剩余金额的98。
这是我想输入到查询中的数学
VAR amountBuyerNeeds = (B.amount - B.bought)
VAR amountSellerStock = (S.amount - S.sold)
//update these values in the simulated cloned table data.
B.bought = IF(amountBuyerNeeds > amountSellerStock, (B.bought + amountSellerStock), B.amount)
S.sold = IF(amountSellerStock > amountBuyerNeeds, (S.sold + amountBuyerNeeds), S.amount)
//to real row print out
willBuyAmount = IF(amountBuyerNeeds > amountSellerStock, amountSellerStock, amountBuyerNeeds)
查询ATM看起来像这样
SELECT S.itemId AS sell_itemId,
S.amount AS sell_amount,
S.price AS sell_price,
S.sold AS sell_sold,
S.collected AS sell_collected,
S.slot AS sell_slot,
S.playerHash AS sell_playerHash,
B.itemId AS buy_itemId,
B.amount AS buy_amount,
B.price AS buy_price,
B.bought AS buy_bought,
B.collected AS buy_collected,
B.slot AS buy_slot,
B.playerHash AS buy_playerHash
FROM Buying AS B,
Selling AS S
ON B.itemId = S.itemId
AND
B.aborted = 0
AND
S.aborted = 0
AND
B.price >= S.price
AND
S.sold < S.amount
AND
B.bought < B.amount
ORDER BY B.price DESC
LIMIT 100;
选择S.itemId作为sell\u itemId,
美国金额作为销售金额,
以美国价格作为卖出价格,
以卖出的形式在美国卖出,
美国作为销售单位收取,
美国插槽作为销售插槽,
S、 当卖花花公子时,
B.itemId作为buy_itemId,
B.作为购买金额的金额,
B.价格为买入价,
B.像买一样买,
B.按买入价收取,
B.插槽作为购买插槽,
B.playerHash作为buy_playerHash
以B的身份购买,
以S的形式销售
在B.itemId=S.itemId上
及
B.中止=0
及
S.0=0
及
B.价格>=S.价格
及
已售出金额<已售出金额
及
B.购买
是的,你可能会想,为什么我在sqlite中使用了mysql标记
我没有使用sql查询标记
,它变成了mysql,所以应该是一样的。等等,“sql query”别名是“mysql”?(看起来…)不…看起来它是“sql”的别名。不知道为什么“mysql”会出现;编辑出来。哦,天啊,我想那是我的错误。