MYSQL库存槽(将项目添加到下一个槽中)

时间:2012-07-30 14:23:43

标签: mysql

  $slt = mysql_query("select Slot, ItemId, UserId, max(Slot) Slot
  from useritems
  group by UserId");    

  while ($sloot = mysql_fetch_assoc($slt))
{
 Echo "<br>Items with biggest slots are: " . $sloot['ItemId'] . " from user " . $sloot['UserId']. "- in slot-". $sloot['Slot'];
}

这是表格

Idi Quantity    ItemId  UserId  Slot    ExpirationDate

输出最小的插槽......为什么?

1.我想向我展示每个用户最大的库存插槽,所以当我在他的库存中添加一个新项目时,我可以在下一个插槽中添加..从示例用户Paul有5个项目,ocupies slot 1,2, 3,4,5,下一个项目将在第6个插槽中。

2.当用户在插槽1,2,4,5,6上移动他的项目时,添加的下一个项目将在插槽3上

我做了很多搜索,但我找不到自己:) PS:游戏我m making it只是为了好玩..但也许有一天会是一场伟大的比赛:)(梦想,梦想:)))

编辑:

SQLFIDDLE非常好谢谢:)这正是我需要学习的一些SQL 表用户项目

useritems Table IMAGE
items Table

我的回声告诉我:

Id = 1 and it should be 3; user=4(good); slot=4(good)
Id = 1 and it should be 2; user=5(good); slot=2(good)

2 个答案:

答案 0 :(得分:1)

可能是这样的:

select userid, itemid, max(slot) from useritems where itemid is not null and quantity>0
group by userid, itemid

如果您与一些数据共享表脚本,它会更容易帮助您。

您可以使用:http://sqlfiddle.com/

编辑:

这个怎么样? Itemid = 0表示插槽是免费的吗?所以min(slot)将是用户的第一个空闲时段。

select userid, min(slot) from useritems where itemid=0 group by userid

答案 1 :(得分:0)

我找到了它!:)我只是忘了选择UserId = my_id的数据但是只有当相应的用户有超过3个项目时它才会显示核心输出...

$slt = mysql_query("SELECT * FROM useritems WHERE Slot=(select max(Slot) from useritems) and UserId='$id'");     

$id = $_SESSION['id'];

$slt = mysql_query("
    SELECT * FROM `useritems` 
    WHERE UserId='$id' AND Slot=(select max(Slot) 
    from useritems where UserId='$id')
");`

EDIT2:我找到了所有正在搜索的最佳方式,但我不知道如何使用WHERE子句userId ='$ id'

$slt2 = mysql_query("select l.Slot + 1 as start
    from useritems as l
    left outer join useritems as r on l.Slot + 1 = r.Slot
    where r.Slot is null and l.UserId=4;
") or die(mysql_error());   `

使用此查询,该项目应放在插槽2上(至少丢失),但它显示插槽6(对于UserId = 4的用户来说最高)

最后这是最后一次编辑

$slt2 = mysql_query("SELECT  Slot + 1 as start
   FROM    useritems mo
   WHERE   NOT EXISTS
   (
       SELECT  NULL
       FROM    useritems mi 
       WHERE   mi.Slot = mo.Slot + 1 AND mi.UserId = '$id'  
   )ORDER BY Slot LIMIT 1
") or die(mysql_error());   `

这就是我在搜索的内容。:X