0

get_user_set1ここでは 2 つの関数を使用していget_user_set2ます。

私のページにはdiv1、12 人のユーザーが表示され、さらに 12 人のユーザーがdiv2表示されます。全部で 24 人のユーザーがいます。

私がやろうとしているのは、2 つの div にまたがる 24 人のユーザーすべてを表示するため、それぞれに 12 人です。現時点ではLimit 0、最初の div に最初の 12 人のユーザーを表示し、次に 2 番目の div に次の 12 人のユーザーを表示する 2 番目の関数に 12, 24 を使用しています。

ただし、重複ユーザーを作成せずに、24 ユーザーのそれぞれを表示し、12 に制限しながら、24 ユーザーがランダムに表示される順序を作成する方法を理解しようとしています。私はこれをします?

ありがとう。

function 1: 

function get_user_set1() {
            global $connection;
            $query = "SELECT *
                        FROM ptb_users, ptb_profiles
                        WHERE ptb_users.account_type = \"User\"
                        AND ptb_users.account_status = \"Active\"
                        AND ptb_profiles.user_id = ptb_users.id
                        AND ptb_users.subscription = \"Free\"
                        ORDER BY RAND()
                        LIMIT 0 , 12";
            $get_user_set1 = mysql_query($query, $connection);
            confirm_query($get_user_set1);
            return $get_user_set1;
        }
function 2:

        function get_user_set2() {
            global $connection;
            $query = "SELECT *
                        FROM ptb_users, ptb_profiles
                        WHERE ptb_users.account_type = \"User\"
                        AND ptb_users.account_status = \"Active\"
                        AND ptb_profiles.user_id = ptb_users.id
                        AND ptb_users.subscription = \"Free\"
                        ORDER BY RAND()
                        LIMIT 12 , 24";
            $get_user_set2 = mysql_query($query, $connection);
            confirm_query($get_user_set2);
            return $get_user_set2;
        }
4

5 に答える 5

1

EveryORDER BY RAND()はランダムに並べられた異なるユーザーのセットを提供するため、2 番目のクエリで「次の」12 ユーザーを求めることは意味がありません。次の 12 ユーザーを別のランダムな順序で取得します。

本当にやりたいことが 24 人のユーザーを 12 人ずつの 2 つのセットで表示する場合は、 で 1 つを表示し、SELECTそのLIMIT 24セットを半分に分割します。

于 2013-02-09T22:50:19.777 に答える
0

私が質問を正しく理解していれば、ユーザーには 2 つの部門があります。それぞれからランダムに 12 個を選択し、それらをランダムに提示します。

以下は、各グループにサブクエリを使用し、それらを結合してランダムに並べることにより、これを行います。

select *
from ((SELECT *
       FROM ptb_users join
            ptb_profiles
            on ptb_profiles.user_id = ptb_users.id
       WHERE ptb_users.account_type = \"User\" and
             ptb_users.account_status = \"Active\" and
             ptb_users.subscription = \"Free\" and
             DIVISION = DIV1
       ORDER BY RAND() 
       limit 12
      ) union all
      (SELECT *
       FROM ptb_users join
            ptb_profiles
            on ptb_profiles.user_id = ptb_users.id
       WHERE ptb_users.account_type = \"User\" and
             ptb_users.account_status = \"Active\" and
             ptb_users.subscription = \"Free\" and
             DIVISION = DIV2
       ORDER BY RAND() 
       limit 12
      )
    ) t
ORDER BY RAND()
于 2013-02-09T23:20:10.963 に答える
0

なぜ 2 つの関数があるのだろうか。クエリを 1 つだけ実行して limit 変数で制御できる。

         "SELECT *
                    FROM ptb_users, ptb_profiles
                    WHERE ptb_users.account_type = \"User\"
                    AND ptb_users.account_status = \"Active\"
                    AND ptb_profiles.user_id = ptb_users.id
                    AND ptb_users.subscription = \"Free\"
                    ORDER BY RAND()
                     $limit ";
                        ^---------limit variable here

このようなもの

 if (something here ){$limit = 'LIMIT 0,12'; }
 if (something else){$limit = 'LIMIT 12,24';}
于 2013-02-09T22:43:06.577 に答える
0

2 つのクエリを作成する代わりに、次のクエリを 1 回作成します。

SELECT *
FROM ptb_users, ptb_profiles
WHERE ptb_users.account_type = \"User\"
AND ptb_users.account_status = \"Active\"
AND ptb_profiles.user_id = ptb_users.id
AND ptb_users.subscription = \"Free\"
ORDER BY RAND()
LIMIT 0 , 24

PHP を使用して、結果の最初の 12 行を 1 つの div に表示し、最後の 12 行を別の div に表示します。

于 2013-02-09T22:52:28.473 に答える
0

必要なクエリは 1 つだけです。ループを実行してそれぞれを表示する場合、反復子が 12 より小さいかどうかをループ内で「IF」で制御し、正しい DIV に出力できます。詳細が必要な場合は、教えてください。

于 2013-02-09T22:38:15.960 に答える