2
  $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.各ユーザーの最大の在庫スロットを表示したいので、彼の在庫に新しいアイテムを追加すると、次のスロットに追加できます..例ユーザーポールは、スロット1、2、3、4を占有する5つのアイテムを持っています,5 となり、次のアイテムはスロット 6 になります。

2. ユーザーがアイテムをスロット 1、2、4、5、6 に移動すると、次に追加されるアイテムはスロット 3 になります。

私はたくさんの検索をしましたが、私は自分自身を見つけることができません:) PS: 私はm making itただの楽しみのためのゲームです..しかし、いつか素晴らしいゲームになるかもしれません:) (夢、夢:)) )

編集:


SQLFIDDLE は非常に優れています。ありがとうございます :) SQLテーブルのユーザー項目を学ぶためにまさに必要なものです。

useritems テーブル IMAGE
items テーブル

私のエコーは私にそれを示しています:

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)
4

2 に答える 2

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
于 2012-07-30T14:36:42.603 に答える
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

于 2012-07-31T07:33:30.273 に答える