0

ログインしているユーザーが投稿を投稿したユーザーと関係がある (フォローしている) ユーザーからのすべての投稿を選択する Web サイトのニュース フィードのクエリがあります。紛らわしいように聞こえますが、ここに私のクエリがあります:

SELECT DISTINCT * 
FROM    posts a 
        LEFT JOIN relations b
            ON a.user_id = b.user2
WHERE   b.user1 = $user_id AND 
    b.status IN (1) OR a.user_id = $user_id
ORDER BY a.post_id DESC LIMIT 300

ここで、ユーザーがフィルター セットを持っている場合は、投稿をフィルターする必要があります。パラメータは配列に設定されていますが、クエリに条件を設定して、作成した配列に対してテストする方法がわかりません。WHERE 句を構成するにはどうすればよいですか? 私はa.tagをテストしています

パラメータを含む配列: $array

SELECT DISTINCT * 
FROM    posts a 
        LEFT JOIN relations b
            ON a.user_id = b.user2
WHERE   b.user1 = $user_id AND

助けが必要なこと:

        a.tag IN ARRAY $array AND

    b.status IN (1) OR a.user_id = $user_id
ORDER BY a.post_id DESC LIMIT 300

ありがとう!

4

1 に答える 1

3

implode()値を連結するために使用できます。

$escaped = array_map('mysqli_real_escape_string', $array);
$in = "IN ('" . implode("', '", $escaped) . "')";

次に、クエリで次のようにします。

a.tag $in AND ...

配列に文字列が含まれている場合は、エスケープする必要があります。これは、クエリの実行に使用しているドライバーに関連するものです。

于 2013-03-19T20:15:05.987 に答える