【发布时间】:2012-03-05 08:40:43
【问题描述】:
代码
目前我的代码是这样的。
$stmt = $this->db->prepare("SELECT m.id, m.from_id, m.to_id, m.subject, m.date, m.deleted, m.read, u.fname, u.mname, u.lname FROM msghistory AS m,users AS u WHERE m.from_id=u.id AND m.to_id=u.id AND GROUP BY m.id DESC");
$stmt->execute();
$stmt->store_result();
if ($stmt->affected_rows > 0) {
$msg = array();
$stmt->bind_result($msg['id'], $msg['from_name'], $msg['to_name'], $msg['subject'], $msg['message'], $msg['date'], $msg['deleted'], $msg['read']);
while ($stmt->fetch()) {
<echoing results one by one> }
}
我想做什么
我想将u.fname+u.mname+u.lname(msghistory.from_id=users.id)作为$msg['from_name'],再次将u.fname+u.mname+u.lname(但是这次msghistory.to_id=users.id)作为$msg['to_name']。
示例
message | from_id | to-id
hi | 1 | 5
如您所见,这意味着用户 1 向用户 5 发送消息 hi。
假设在用户表 fname 中,用户 id=1 的 lname - John Doe 和 5 - George Smith 我想将其显示为输出结果
message | from_id | to-id
hi | John Doe| George Smith
问题
我知道至少有 3 个查询是可能的。但试图找到最佳方式。那么,这可以通过一个且唯一的查询来实现吗?
更新
根据用户的 2 个有用的答案,我将查询修改为此
$stmt = $this->db->prepare("SELECT
message.id, message.from_id, message.to_id, message.subject,
message.date, message.deleted, message.read,
CONCAT_WS(' ',sender.fname, sender.mname, sender.lname) AS sender_name,
CONCAT_WS(' ',recipient.fname, recipient.mname, recipient.lname) AS recipient_name,
FROM msghistory AS message
LEFT JOIN users AS sender ON sender.id=message.from_id,
LEFT JOIN users AS recipient ON recipient.id=message.to_id
GROUP BY message.id DESC");
【问题讨论】:
标签: php mysql email mysqli prepared-statement