1

mysql のヘルプが必要です。

入札がいっぱいのテーブルがあります。同じユーザーからの入札が 3 つ以上あるかどうかを確認する必要があります。

たとえば、次のコードがあります。

$all = sql_get('select all bids from bids where auction_id = 1 order by amount asc');
$total = 0;

foreach ($all as $bid) {
  if ($bid->user_id == $user->id) {
    if (++$total <= 3) continue;
    $bid->burned = true;
    sql_store($bid);
    show_error('you cant have more than 4 bids one after another, the last bid was burned.');
  } else {
    $total = 0;
  }
}

単一のクエリでそれを行う方法はありますか?

4

2 に答える 2

1
SELECT user_id, CASE WHEN @user_id = user_id 
    THEN @rownum := @rownum + 1 
    ELSE ((@user_id := user_id) * 0) + (@rownum := 1) END AS rownum
FROM (  SELECT user_id
        FROM bids, (SELECT @rownum := 0, @user_id := NULL) AS vars
        WHERE auction_id = 1
        ORDER BY created DESC) AS h
HAVING user_id = '{$user->id}' AND rownum >= 3

user_id をクエリに解析するだけで、3 つ連続しているかどうかがわかります。これは、行が列で作成された時間を節約することを前提としていcreatedます。

于 2013-02-11T12:29:30.353 に答える
0

count クエリを実行して、user_id をWHERE句に渡さないのはなぜですか?

$query = "SELECT COUNT(bids) AS total_bids FROM bids WHERE auction_id = 1 AND user_id = '$user->id' ORDER BY amount";
于 2013-02-11T12:17:12.767 に答える