0

PHP で mysql ステートメントを書くのに助けが必要です。同じテーブルで同じ外部キーを 2 回参照しており、SELECT ステートメントで両方のインスタンスを参照する必要があります。IE メッセージというテーブルがあり、送信者と受信者というラベルの付いた 2 つの列があります。両方の列がテーブル users にリンクしています。同じクエリで送信者ユーザーと受信者ユーザーから情報を取得する必要があります。StackOverflow で他の回答を見たことがありますが、正しく実行していないようです:/

これは、送信者ユーザーのリンクのみを取得する、PHP での現在の mysqli 呼び出しです。

require_once('includes/connection.inc.php');

$db = dbConnect();

$stmt = $db->stmt_init();

$stmt = $db->prepare("
SELECT message.timestamp, message_type.type, 
message.sender, message.receiver, message.sender_language, 
language.translate_code, message.subject_translate, message.body_translate,
message.subject, message.body, users.image, users.externalid, users.fname,
users.lname FROM message 
INNER JOIN users ON message.sender=users.id 
INNER JOIN language ON message.sender_language=language.id
INNER JOIN message_type ON message.type=message_type.id 
WHERE (message.receiver=? AND message.archived='n') 
ORDER BY message.timestamp DESC 
LIMIT 0,10 ");

$stmt->bind_param('i', $session_id);

$stmt->execute();

$stmt->bind_result($row['date'], $row['message_type'], $row['sender'],
$row['receiver'], $row['sender_language'], $row['sender_language_code'],
$row['subject'], $row['body'], $row['subject_original'], 
$row['body_original'], $row['image'], $row['user_name'], $row['fname'],
$row['lname'] );

$record_count = 0;

while($stmt->fetch()){...

このコードは正常に動作しますが、追加する必要があります

"INNER JOIN users ON message.receiver=users.id"

正しく、message.senderだけでなく、message.receiverに関して「users.image、users.externalid、users.fname、users.lname」を含めることができます

この質問/回答を参照してコードを書き直していましたが、行き詰まりました:同じテーブルを参照する ForeignKey

4

1 に答える 1

3

エイリアスを使用してこの戦略を試してください:

SELECT msg.id, sender.id, receiver.id
FROM message msg
INNER JOIN users sender ON msg.sender=sender.id 
INNER JOIN users receiver ON msg.receiver=receiver.id 
WHERE [PUT_THE_WHERE_CONDITIONS_HERE]
ORDER BY message.timestamp DESC 
LIMIT 0,10
于 2012-12-13T07:36:46.560 に答える