这就是我为我的网站构建一个消息传递系统的方式,这就是我希望两个用途之间的所有对话都是在另外几个地方的地方,
fra_id
是发送消息的人
til_id
是接收消息的人。
现在的问题是,即使对话中有更多消息,它也只会显示一条消息。
SELECT
fms_bruger.fornavn,
fms_bruger.efternavn,
fms_opslagpm.id,
fms_opslagpm.title,
fms_opslagpm.besked
FROM fms_bruger
INNER JOIN fms_opslagpm ON fms_bruger.id=fms_opslagpm.fra_id
WHERE fms_opslagpm.id = ?
GROUP BY fms_opslagpm.title
ORDER BY fms_opslagpm.datotid DESC
我怎么能这样做所有的采访都有一个地方而不是在页面上。
EIDT
$sql = "SELECT fms_bruger.fornavn, fms_bruger.efternavn, fms_opslagpm.id,
fms_opslagpm.title, fms_opslagpm.besked
FROM fms_bruger INNER JOIN
fms_opslagpm ON fms_bruger.id=fms_opslagpm.fra_id
WHERE fms_opslagpm.id = ?
GROUP BY fms_opslagpm.title AND fra_id = ? OR til_id = ?
ORDER BY fms_opslagpm.datotid DESC";
if ($stmt = $this->mysqli->prepare($sql)) {
$stmt->bind_param('iii', $id, $fra_id, $til_id);
$id = $_GET["id"];
$fra_id = $_SESSION["id"];
$til_id = $_SESSION["id"];
EIDT EIDT
SELECT fms_bruger.fornavn, fms_bruger.efternavn, fms_opslagpm.id, fms_opslagpm.title,
fms_opslagpm.besked
FROM fms_bruger INNER JOIN fms_opslagpm
ON fms_bruger.id=fms_opslagpm.fra_id
WHERE fms_opslagpm.id = ?
GROUP BY fms_opslagpm.title
AND (fra_id = ? OR til_id = ?)
ORDER BY fms_opslagpm.datotid DESC
我在这里试试:
SELECT fms_bruger.fornavn, fms_bruger.efternavn, fms_opslagpm.id, fms_opslagpm.title,
fms_opslagpm.besked
FROM fms_bruger INNER JOIN fms_opslagpm
ON fms_bruger.id=fms_opslagpm.fra_id
WHERE fms_opslagpm.id = ? and (fra_id = ? OR til_id = ?)
GROUP BY fms_opslagpm.title
ORDER BY fms_opslagpm.datotid DESC
我再试一次
SELECT fms_bruger.fornavn, fms_bruger.efternavn, fms_opslagpm.id, fms_opslagpm.title,
fms_opslagpm.besked
FROM fms_bruger INNER JOIN fms_opslagpm
ON fms_bruger.id=fms_opslagpm.fra_id
WHERE fms_opslagpm.id = ? and (fra_id = ? OR til_id = ?)
ORDER BY fms_opslagpm.datotid DESC
答案 0 :(得分:1)
您的问题是您只选择
WHERE fms_opslagpm.id = ?
因此它只返回id
上完全匹配的1行。您似乎在尝试同时选择与title
id
的行
GROUP BY fms_opslagpm.title
但即使您返回的行数超过1行,也会将结果再次折叠为1行。
您需要更改查询以获取行title
的{{1}},并使用WHERE fms_opslagpm.id = ?
选择具有相同OR
的所有其他行。
尝试 -
title
请参阅此SQLFiddle示例 - http://sqlfiddle.com/#!2/36d534/6
您还需要在SELECT
fms_bruger.fornavn,
fms_bruger.efternavn,
fms_opslagpm.id,
fms_opslagpm.title,
fms_opslagpm.besked
FROM fms_bruger
INNER JOIN fms_opslagpm ON fms_bruger.id=fms_opslagpm.fra_id
WHERE (
fms_opslagpm.id = ?
OR fms_opslagpm.title = (
SELECT fms_opslagpm.title
FROM fms_opslagpm
WHERE fms_opslagpm.id = ?
)
)
AND
(
fms_opslagpm.fra_id = ?
OR
fms_opslagpm.til_id = ?
)
ORDER BY fms_opslagpm.datotid DESC
bind_param
答案 1 :(得分:0)
您的GROUP BY
子句正在使用相同的title
折叠记录。在GROUP BY
子句中添加另一个字段,或将其丢弃 - 它目前尚未用于提供聚合。