特定の user_id に最も関連性の高いデータを選別するアルゴリズムを作成しようとしています。
最終結果は、見つかった USER_ID としての KEY と、特定の USER_ID が異なる行で見つかった回数である VALUE を持つ配列になると思います。
したがって、さまざまなテーブルのさまざまな行を調べて、CURRENT_USER_ID (ID: 30 としましょう) が存在する場所を探し、通信先のユーザーである RECIEVER_ID を見つける必要があります。これを説明するのはかなり難しいですが、例を挙げてみましょう。
- edu_posts というテーブルがあります。このテーブルには、ウォールポストとこれらへのコメントが含まれています。この表では値が異なりますが、注目すべきは post_author と post_reciever です。次に、post_author が 30 に等しいすべての行を探し (テスト例。現在のユーザー ID のみが必要です)、post_reciever IDS を出力する必要があります。これは 1 つのクエリで十分に簡単ですが、5 つまたは 10 の異なるテーブルでデータを検索する必要があるとしましょう。
- edu_followers というテーブルもあります。そこで、follow_author が 30 に等しい場所を探す必要があります (テスト例。必要なのは現在のユーザー ID だけです)。次に、follow_user ID を出力します。繰り返しますが、現在のユーザーが誰に興味を持っているかを調べます。
最終的な mysql_fetch を次のようにイメージします。
user_id => 25
times_found => 5
user_id => 11
times_found => 3
user_id => 95
times_found => 1
等
おそらくJOINを使用して、単一のクエリを使用してこれを行うことができますか? また、クエリで結果をカウントすることもできるので、PHP コードでこれを手動で行う必要はありません。
または、データを取得したいテーブルごとに mysql_query を作成し、その後 PHP を使用してデータを管理する必要がありますか? これは私にとって最も簡単な方法のように思えますが、スクリプトの最適化に関しては最も非効率的でもあります。
次のテストクエリを試してみました:
SELECT
u.user_id AS user_id,
f.follow_user AS user_id_follow,
p.post_reciever AS user_id_posts
FROM
`edu_posts` u
LEFT JOIN `edu_followers` f ON f.follow_author = '30'
LEFT JOIN `edu_posts` p ON p.post_author = '30' && p.post_reciever != '30'
WHERE
u.user_id = '30'
GROUP BY
f.follow_id, p.post_id
しかし問題は、それが例外のない結果を出力することです。また、fx: user_id (既に 30 であることはわかっているので、実際には必要ありません)、user_id_follow、user_id_posts など、さまざまな値を探す必要があります。
私の質問を理解していただければ幸いです。追加情報が必要な場合はお知らせください。
よろしくお願いします!