2011-06-25 1 views
3

私は現在MySQLとMyISAMを使用しています。ユーザーリストの全員のデータベースクエリが多すぎますか?

私は、自分のアプリケーションで友人やユーザーのユーザーIDの配列を返す関数を持っています。それらを表示すると、foreachが最もよく見えました。

私の問題はIDだけなので、ループ内のユーザーIDに基づいて各ユーザーの他の情報(名前、アバター、その他のフィールド)を取得するためにデータベース呼び出しをネストする必要があります。

私は、ディスプレイ用のforeachにコードを配置する柔軟性など、どのようにこれを行うべきですが、ID配列に頼らないように、何十万人ものユーザー(主に趣味学習用)を期待していません。 1つのクエリを使用することができますか?

リストを適切に表示できる一般的な構造やヒントはありますか?

私のクエリの量(リストのユーザーあたり1:1)は不適切ですか? (ユーザーのページ0..n、一度に10個は一度に気づかないほどですが)

+0

私はあなたが必要とする各IDのどこにOR文を書くことができると思いますが、それが最良の方法であるかどうかは100%確信していません。 – Manhim

答えて

4

あなたはIN()MySQLのメソッドを使用することができ、すなわち

SELECT username,email,etc FROM user_table WHERE userid IN (1,15,36,105) 

これは、ユーザーIDがそれらのIDと一致するすべての行を返します。 IDを追加するほど効率が悪くなりますが、あなたが言いたいのは10ほどです。

+0

また、あなたもそうすることができます:) - >より良い答えを得るために@Bulkをキックします –

+0

私は私の答えを申し訳ありませんでした質問を完全に誤解しました –

+0

ありがとう、これは私がやっているもの私はあまりにもそれを行うことができるかどうかを見るためにジョインを学ぶことに興奮しています。私は助言が大好きです:) –

1

なぜ、1回のショットですべてのデータを取得するために左結合を使用できませんでしたか?リストを取得しているように聞こえますが、単一のユーザーの情報をすべて取得する必要があります。そうですか?

データベースは結果セットについてのもので、必要に応じて通常は1行しか返すことはできませんが、ほとんどの場合、1行を取得する必要はありません。

たとえば、友人のリストがユーザーのエントリのテキスト列に保持されている可能性があります。

+0

OPはこれが「趣味の学習」だと言います。その場合は、最初から正しく学習し、流星のアドバイスに従ってください。すべての情報がセットに返されるように、1つまたは2つのジョインを行います。これにより、あらゆる種類のforeachコーディングが可能になります。 –

+0

@KenDowns(これは話題にはなりません)が、OPはどういう意味ですか? (私はあなたが質問の著者に言及していることを知っていますが、OPは何を表していますか? –

+0

元のポスター – meteorainer

1

データベースが小さいかどうかにかかわらず、MyISAMではなくInnoDBエンジンの使用を検討します。 (あなたの趣味の成長に合わせて)それはMyISAMテーブルよりも処理のために少し高いオーバーヘッドを持っている、しかし、あなたは複数のテーブルから特定のデータを引き込むことを可能にするであろう、JOINを含むすべての追加の利点を得る:

SELECT u.`id`, p.`name`, p.`avatar` 
    FROM `Users` AS u 
    LEFT JOIN `Profiles` AS p USING `id` 

返しますオンラインデータベースの正規化の話を、多くのリソースがあります

(両方のテーブルのIDが一致)プロファイルからのユーザーと名前とアバターのIDは、あなたが楽しむことがありますhttp://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/

+1

myisamは結合を許可しますいつもやっています – meteorainer

+0

@meteorainerあなたは正しいです、 〜を提供する。私はInnoDBに切り替えた理由があることを知っていました(トランザクションとともに) –

+0

AH、私は実際にFKについて先日学んだことがあります。そして、奇妙なのは、FKを呼び出すときにキー作成SQLを書いていて、エラーがないということでした。それはちょうど通常のインデックスを作成したばかりです。 – meteorainer

関連する問題