私は、主に学習目的のために、* ampシステムを使って内部Webベースのメッセージシステムを作ろうとしています。私はこれが些細な話題なのかどうかはわかりませんが、私は困難を抱えていますので、私に同行してください。多対多テーブルからmysqliをソート
目的は、最後に送受信されたメッセージによって注文された連絡先をすべて一覧表示することです。 SQLは、この
$query = "SELECT username, user.id as user_id,
(SELECT COUNT(message_read)
FROM message_user
WHERE message_read = 0
AND sent_id = user_id
AND receive_id = {$userId}) as unread
FROM user
WHERE user.id IN
(SELECT contact_id FROM allowed_contact WHERE user_id = {$userId})
;";
テーブルの構造のように見える、それをソートせずに現在 は以下のとおりです。
user
テーブルはsent_id
とreceive_id
、
を持ってmessage_user
テーブルにリンクid
、
を持っています message_user
はmessage.id
に対応するmessage_id
を持ち、
message
テーブルはtimestamp
です。
私はこれをSQLで行いたいと思っていますが、PHPになった場合、私はそれに頼って辞任します。 (未テスト)DISTINCT
と
**警告**:mysqliを使用する場合は、パラメータ化されたクエリと['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用する必要がありますユーザーデータをクエリに追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman
'$ userId'は、mysqlがデータベースから作成した、自動生成されたIDです。この値はユーザーが指定しません。 – yak27
あなたはそれを言っていますが、あなたのコードのどこかでお金を賭けることは '$ userId = $ _ GET ['userId']'です。チャンスを取らないでください。 – tadman