отображает только сообщение в разговоре

Я сделал его здесь раньше. mySQL – как показать все записи из таблицы сообщений, а не только одну

Здравствуйте

Вот как я собираюсь создать систему обмена сообщениями, которая заставит пользователя 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; } 

введите описание изображения здесь

Вот как я пишу fra_id = 2 и til_id = 1, а затем показывает, что это все еще только содержимое страницы. Так что samtidigvæk сообщение на странице.

fms_opslagpm = fra_id – это тот, кто отправляет сообщение

fms_opslagpm = til_id – тот, кто получает сообщение

Ваша проблема в том, что вы выбираете только

 WHERE fms_opslagpm.id = ? 

Таким образом, он вернет только 1 строку, где есть точное совпадение с id . Похоже, вы пытаетесь также выбрать строки, имеющие тот же title что и строка с id

 GROUP BY fms_opslagpm.title 

но даже если вы вернули более 1 строки, это снова свернуло результаты в 1 строку.

Вам нужно изменить свой запрос, чтобы получить title строки WHERE fms_opslagpm.id = ? , и используя OR выберите все остальные строки с тем же title .

Пытаться –

 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 

См. Этот пример SQLFiddle – http://sqlfiddle.com/#!2/36d534/6

Вам также необходимо включить еще один параметр в ваш bind_param

 $stmt->bind_param('iiii', $id, $id1, $fra_id, $til_id); $id = $_GET["id"]; $id1 = $_GET["id"]; $fra_id = $_SESSION["id"]; $til_id = $_SESSION["id"];