0

私は、比較投票ロジックを使用して、最高評価を上に、最低評価を下に並べ替えるプロジェクトに取り組んでいます(「ホットかどうか」または「Hotstagram」に似ています)。基本的に私がする必要があるのは、データベースで互いに直接隣り合っている 2 つのランダムな写真を撮り、ユーザーに投票してもらい、勝者に 1 ポイントを追加し、敗者からポイントを差し引いて、基本的に最高のものを一番上にフィルタリングすることです。

私の質問は 2 つあります。MySql データベースでランダムなアイテムを取得し、そのすぐ隣にランダムなアイテムを取得するにはどうすればよいですか。第二に(誰かがこれについて以前に経験したことがある場合)、DBをどのように構築しますか?私は、画像用の1つのテーブルと、投票を保持する2番目のテーブルを考えています(次に、ページの読み込み時に結果をコンパイルします)。ここで私の懸念は何だと思いますが、ランキングでは、新しく入力された写真はゼロから始まるので、同じランクの写真がX枚ある可能性がありますか? 私はそこにいくつかの考えを投げかけているだけで、これを投げ回すには別の心が必要です.

4

2 に答える 2

2

Order by Rand()関数を使用して、データベースからランダム レコードを取得できます。

SELECT * FROM tbl_name ORDER BY RAND();

次のように、これを 2 行に簡単に制限することもできます。

SELECT * FROM tbl_name ORDER BY RAND() limit 2;

ただし、これは 2 つの連続した行ではなく、データベースから 2 つのランダムな行を取得します。

2 つのランダムで連続した行を取得したい場合は、クエリを実行して ID を取得し、サブクエリを実行してその次の ID を取得できます。

データを1つまたは2つのテーブルに保持する場合は、間違いなく2つのテーブルに保持します。投票を保持する 2 番目のテーブルを、画像の ID へのリンクにリンクします。必要に応じて、リンクされた(およびまたは他のフィールド)に必要に応じてインデックスを明らかに追加します。

編集:次のコードは、1 行に 2 つの後続のデータ行を取得するためのコードです。

select
    a.id,
    (
        select
            min(c.id)
        from
            table1 c
        where
            c.id>a.id
        limit 1
    ) as id2
from
    table1 a
order by
    rand()
limit 1;

編集 2: あらゆる種類の他のビットを取り込むためにそれらを別々の行として使用したい場合は、以下のクエリを提供しました。最初のクエリがたまたま最大値を引き出したかのように、追加のサブクエリを使用しました (order by rand() を使用する場合に可能であり、1 行のデータのみを返すという問題を解決します。

select
    b.id
from
    table1 b,
    (
    select
        a.id as id
    from
        table1 a
    where
        a.id<(select max(id) from table1 limit 1)
    order by 
        rand() 
    limit 1
    ) a
where
    b.id>=a.id
    order by
    b.id
limit 2
;
于 2012-07-22T13:37:07.643 に答える
1

2つのランダムな行を順番に取得する別の方法は次のとおりです。

with first as (select id
               from table t
               where id < (select max(id) from table)
               order by rand()
               limit 1
              )
select id
from table t
order by abs(id - first.id)
limit 2

データの構造化について。写真用に1つ、ユーザー用に1つ、「オファー」(ユーザーIDを持つ写真のペア)用に1つ、投票用に1つ必要になるでしょう。通常、ユーザーが投票していないものと、投票しているものを知ることが非常に重要になります。

同じランキングの写真の関係を断ち切りたい場合は、写真が最初にシステムに入った日付、オファーの数、またはその2つの組み合わせを使用できます。

于 2012-07-22T14:36:49.680 に答える