jsonオブジェクト配列の形ですべてのテーブル結果データを提供しているテーブルがあります。この結果は、「メッセージ」テーブルのデータ全体を返します。フィルタMySQLテーブル別のテーブルのリストに基づく結果
目標は、人が$ myusernameと指定がreportedByは「blockRequests」テーブルに表示されている場合を除き、すべての結果を参照するには、ユーザー$ myusernameと指定ログインのためです。
マイPHP:
$myusername = $_GET['username']; //the logged in user who is viewing the messages
$rows = array();
$stmt = $conn->query("SELECT * FROM messages ORDER BY datetime DESC");
while($r = $stmt->fetch(PDO::FETCH_ASSOC))
{
$rows[] = $r;
}
print json_encode(array('messageData' => $rows));
私は別々のテーブルを持っている'blockedRequests' ユーザは人物が'blockedUsr'としてユーザー名を報告し、ユーザーをブロックするように要求を示しています。
すべてのメッセージを返すだけですが、blockedRequestsテーブルに表示される可能性のある'blockedUsr'を除外しています。
マイSQLの知識は、私はテーブルを結合し、望ましい結果を取得する方法を見つけ出すことはできませんので、基本的なものです。私は、これは参加したがフィルタリングされないメッセージのリストを返します
$stmt = $conn->query("SELECT messages.*, blockRequests.* FROM messages
LEFT JOIN blockRequests ON messageBox.user = blockRequests.reportedBy")
を試してみました何
。フィルタリングされたメッセージを取得するためにこれらのテーブルを結合する方法に関するアドバイスは素晴らしいでしょう。 (私は試したものを)
編集
SELECT messages.*, blockRequests.* FROM messages
LEFT JOIN blockRequests ON messages.user = 'suser'
WHERE blockRequests.reportedBy IS NULL
これは私に参加し、テーブルを与えるが、blockedUsrsをフィルタリングしていない、私はまだ結果セットにそれらを参照してください。
FROM left_side_table
LEFT JOIN right_side_table ON left_side_table.column = right_side_table.column
WHERE right_side_table.column IS NULL
AND left_side_table.some_other_column = 'value'
これはあなたのLEFT JOIN
のON
状態でright_side_table
に1つ以上の行にマッチしたleft_side_table
から行を除外し
どこにしようとしているのですか? –
どこかで$ myusernameをどこに置いてはいけないのですか?blockRequests.blockedUser!= messageBox.userを試してみてください。これは私がここでハングアップしたところです。メッセージテーブルは$ myusernameに基づいて何らかの形でフィルタリングする必要があります – MizAkita
どのようにmessages.userに値を与えますか?メッセージ.MizAkita ie – MizAkita