仅在对话中显示消息

时间:2014-04-01 23:08:56

标签: php mysqli

我之前在这里做过。 mySQL - how to show all records from the messages table, not just one

你好

这就是我要构建一个消息系统,让用户1和用户2在某个地方进行对话。

这就是我自己去网站所以所有对话都出现在页面上。

问题是它只从数据库中发出一条消息。因此,我希望它显示来自数据库的所有消息。

数据库

CREATE TABLE IF NOT EXISTS `fms_opslagpm` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fra_id` int(11) NOT NULL,
  `til_id` int(11) NOT NULL,
  `title` varchar(30) NOT NULL,
  `besked` longtext NOT NULL,
  `datotid` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `fms_opslagpm` (`id`, `fra_id`, `til_id`, `title`, `besked`, `datotid`) VALUES
(1, 2, 1, 'hrerherhe', 'hello world ', '2014-04-01 22:25:29'),
(2, 2, 1, 'hrerherhe', 'hej', '2014-04-01 23:51:49');

mysqli / php这里。

$sql = "
                SELECT fms_bruger.fornavn, fms_bruger.efternavn, fms_opslagpm.id, fms_opslagpm.fra_id, fms_opslagpm.til_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 fms_opslagpm.fra_id = ? OR fms_opslagpm.til_id = ? 
                GROUP BY fms_opslagpm.title 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"];
                    $stmt->execute();
                    $stmt->store_result();
                    $stmt->bind_result($fornavn, $efternavn, $id, $fra_id, $til_id, $title, $besked);
                    while ($stmt->fetch()) {
                    ?>
                    <tr class="postbox">
                        <td class="beskedinfoBOX">
                            <p>
                                <?php
                                    echo $fornavn . " " . $efternavn;
                                ?>
                            </p>
                        </td>
                        <td>
                            <?php
                            //beskeden.
                            echo $besked;
                            ?>
                        </td>
                    </tr>
                    <?php
                    }
                    $stmt->close();
                }
                else
                {
                    echo 'Der opstod en fejl i erklæringen: ' . $this->mysqli->error;
                }

enter image description here

这是我写fra_id = 2和til_id = 1的时候,然后显示它仍然只是页面的内容。所以samtidigvæk在页面上留言。

fms_opslagpm = fra_id - 他/她是谁发送消息

fms_opslagpm = til_id - 接收消息的人员

1 个答案:

答案 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

中添加1个参数
bind_param