1

PHP と MySQL を使用する

Facebook から Facebook ユーザー ID の配列を取得しました。

ここで、この配列のアプリケーションで対応するユーザー名を見つけたいと思います。

明らかに、私のアプリケーションでは、ユーザー テーブルに一意のユーザー名と一意の fb_uid 値が含まれています。

私の初歩的なプログラミングの理解は、次の 2 つの方法につながりました。

1) ループを使用して fb_uid の配列を実行し、ユーザー名を 1 つずつ見つけます。

また

2) select distinct(username) from users where fb_uid = value1 OR fb_uid = value2 ... のようなモンスター クエリを作成します。

それで、より良い方法はありますか?

ありがとうございました。

4

3 に答える 3

10

代わりにSQL のIN演算子を使用します。

select distinct(username) from users where fb_uid in (value1, value2, ...)

http://www.w3schools.com/SQl/sql_in.asp

于 2009-08-13T17:00:47.763 に答える
1

fb_uidsのリストが大きい場合(たとえば、100または500 r 1000百のIDを超える場合)、「または」の方法は使用しません。このような「または」が多すぎると、DBが損傷すると思います。

しかし、IDごとに1つのクエリを実行することも実際には良くありません...


では、これら2つのアイデアの組み合わせについてはどうでしょうか。たとえば、50または100 fb_uidsごとに1つのクエリを実行しますか?

そして、ロットやORを使用する代わりに、INを使用できます。このような少し:

select distinct(username) from users where fb_uid IN (id1, id2, id3, ...)

DBの内容が変わるかどうかはわかりませんが、少なくとも見た目は良くなっています^^

唯一のことは、INであまり多くのIDを使用してはいけないということです。したがって、毎回50〜500のIDを使用して、いくつかのクエリを実行するのが良い方法かもしれません。


array_sliceさらにもう少し役立つように、fb_uids配列の「スライス」を抽出する ためにを確認する必要があるかもしれません...

于 2009-08-13T17:04:10.970 に答える
0

別の MySQL 関数があります: MATCH AGAINST

SELECT * FROM customer WHERE status = 1 AND MATCH (person, city, company, zipcode, tags) AGAINST ('".$searchstring."' IN BOOLEAN MODE)

入力文字列は異なる列で検索されます。

この関数を知らなかった場合は、SQL ステートメントを再考することができます。

于 2009-08-14T12:12:03.070 に答える