2012-04-27 8 views
0

私はより大きなMySQLクエリを実行する必要があるこのmysqlデータベースを持っています。 ユーザーAには、ユーザーと呼ばれるテーブル内の行があります。 「トラッカー」と呼ばれるフィールドの値には、ユーザーAが通知を受け取る、友人のIDとカンマで区切られた値があります。パフォーマンスのためのベストMySQLクエリ

MySQL - >ユーザー(テーブル) - >トラッカー(フィールド) - > 2,3,4(値)

MySQLサーバは、1つのクエリでカンマで値を区切る必要があります。サーバーがPHP foreachを使って値ごとに1つのクエリを実行するのではなく、1つのクエリしか実行しないと、サーバーに面白いと思います。

私のようなクエリが必要です(ID = $私区切らBYユーザーからトラッカーを選択)

+0

が、これは古典的です"csvフィールド"を使用せず、代わりに別のテーブルを使うべきでない理由の例... –

答えて

1

私の気持ちは、あなたが達成したいと思っているテーブルのデザインが正しくないということです。私の個人的なアプローチは、トラッカーを独自のテーブルに分離することでした。ユーザは基本的に別のユーザを追跡しているため、テーブルはユーザテーブルと2回リンクします。

以下の表のデザインを参照してください。

Suggested Table Design

この設計は、このように、ユーザーが下記のようなクエリを経由して追跡しているすべてのユーザを選択することができます:あまりnitpickしない

SELECT users.* 
FROM trackers 
INNER JOIN users ON id = tracker 
WHERE user.id = {your user id} 
+0

+1 'user' ** has_many **' user' **〜** 'trackers'。それは基本的にはフォロワー/フレンドテーブルです。 – Xeoncross

0

に、私はいつもあなたのようなクエリが2つのクエリを実行するために通常であることを発見したユーザーからのSELECT *を最高のソリューション。

最初:

SELECT trackers FROM users WHERE `user_id` = $me 

そして第二には、に最初の結果を内破:

SELECT * FROM users WHERE `id` IN (".implode(',',$results).") 

ことが最高解決策ですが、私の経験では、それが作られているかどうかわかりません私が取り組んでいるいくつかのサイトでは、ページの読み込み時間に大きな違いがあります。

関連する問題