0

シナリオ

この問題には 3 つの要素があります。1 つは、(1,3,5,6,8) の形式の ID の配列です。その配列は、表示したいユーザーの ID のリストです。2 番目の要素は、 id name surname emailのような単純なユーザー情報を含むテーブルです。3 番目の要素は、ユーザー構成を含む 2 番目のテーブルです。最後のテーブルには 2 つのパラメーターがあり、1 つはlidで、もう 1 つはusraction です(とりわけ重要なのはこれら 2 つです)。lid はパーミッション タイプを表し、usraction は値を表します。ユーザーが自分のデータを公開したい場合、そのテーブルには、lid=3およびusraction="accepted"の行が作成されます。、また、ユーザーがこの権限を変更するたびにアクションの日時を登録するため、変更するたびに新しい行が追加され、権限の実際の状態を取得するには、ユーザーの最後の行を取得する必要があります次のように usraction の値を確認します。

SELECT * FROM legallog WHERE uid = '.$user['id'].' AND lid = 3 ORDER BY ABS(`registration` - NOW()) LIMIT 1

次にphpで:

if($queryresult && $queryresult[0]['usraction']=='accepted') //display data

問題

シナリオ id では、一度に 1 人のユーザーによって設定されたアクセス許可の実際の状態を取得する方法を説明しましたが、問題は、1 つまたは 2 つの SQL 呼び出しで ID の配列を整理したいということです。4 人のユーザーのユーザー情報を出力したいとします。1 つの関数で (2,6,8,1) の形式で ID が返されますが、前に示したクエリを使用して、それらのユーザーは自分の情報を表示したくない場合があります。ユーザーごとに SQL サーバーを呼び出して、新しい配列を生成できます。承認するユーザーが 1 と 8 の場合、結果の配列は (8,1) になります。

100 人のユーザーの配列で 100 回の呼び出しを行いますが、これは望ましくありません。1 つまたは 2 つのクエリでこれを解決する方法はありますか?

4

3 に答える 3

1

このようなクエリは、必要な情報を取得します。

select u.*,
       (select usraction from configuration c where c.userid = u.userid and c.lid = 3 order by datetime limit 1
       ) as lastLid3Action
from users u
where u.userid  in (1,3,5,6,8)

「受け入れられた」値のみが必要な場合は、これをサブクエリにします。

select t.*
from (select u.*,
             (select usraction from configuration c where c.userid = u.userid and c.lid = 3 order by datetime limit 1
             ) as lastLid3Action
      from users u
      where u.userid  in (1,3,5,6,8)
     ) t
where LastLid3Action = 'Accepted'
于 2013-01-30T16:03:22.873 に答える
0

私が理解しているように、最初のテーブルにはユーザー情報が格納されている 2 つのテーブルがあります。2 番目のテーブルには、ユーザーのアクセス許可が格納されます。そして、2 番目のテーブルの権限を使用して最初のテーブルから情報を取得するには、次のクエリが必要です。

SELECT a.*
FROM first-table-name AS a
RIGHT JOIN second-table-name AS b a.uid = b.lid
WHERE uid in (1,3,5,6,8) AND usraction='accepted'
ORDER BY ABS)
LIMIT 1
于 2013-01-30T16:07:24.220 に答える
-1

あなたの質問はやや漠然としていますが、ID のリストがあるときに多数のレコードを選択する方法を尋ねている場合、答えは次のとおりです。

select column, list, goes, here from tablename
where id in (1,5,8,12,413);

これにより、リストした列の値が、ID の配列に一致するレコードだけに取得されます。

于 2013-01-30T14:29:43.863 に答える