0

Facebook、Twitter、その他のソーシャル メディア サイトのようなニュース フィード ページを作成しています。

私の問題は、各ユーザーの友人のすべてのユーザー ID を取得し、それらすべての値を使用して、すべての新しい更新を含む別のテーブルをクエリする必要があることです。

では、私には 3 人の友達 (1,2,3) がいるとしましょう。同じクエリで WHERE 句の 3 つの値すべてを使用して別のテーブルを検索し、日付順に並べ替えたいと考えています。

私がこれまで行ってきた方法では、すべての ID を配列に入れ、foreach ループを使用してデータベースにすべての値をクエリしますが、これは配列内のユーザー ID の順序に基づいてすべての結果をグループ化するため、結果は、更新が行われた時間ではなく、この 11111,222222,333333 のようになります。したがって、3 が 1 または 2 の数日前に更新を行ったとしても、それは常に 2 の後に行われます。

これが最善の方法ではないことは承知していますが、これまでのところ、私が考えることができる唯一の方法です。

どうぞよろしくお願いいたします。

私のコード:

$id = $_SESSION['id'];
$update = mysql_query("
    SELECT profile_id FROM `fiends` 
    WHERE `my_fiend_id` = '$id'
    ");
$result = $update;
$fiends = array();

while (($row = mysql_fetch_assoc($result)) !== false) {
    $fiends[] = array(
        'id' => $row['profile_id'],
);}

foreach($fiends as $fiend) {
    $fiend_id = $fiend['id'];
    $update_select = mysql_query("          
        SELECT * FROM `update` 
        WHERE `NU_id` = '$fiend_id'                 
        ORDER BY `time` DESC
        ");

$result = $update_select;
4

2 に答える 2

0

PHPループを使用する代わりに、SQLクエリで内部結合を使用することをお勧めします。MySQLはPHPループよりも高速です。

この単純なバージョンを最初に試してください

SELECT friends.profile_id, update.* 
FROM `fiends`, `update` 
WHERE `my_fiend_id` = '$id'
AND `NU_id` = `my_fiend_id`                 
ORDER BY `time` DESC
于 2013-03-08T15:12:59.963 に答える