Всем привет. Помогите разобраться с ошибкой. Есть база данных с двумя таблицами: messages и users. нужно вывести всех пользователей, с которыми определенный пользователь(чья страница открыта) когда либо переписывался. Есть цикл do-while: PHP: $tmp1 = mysql_query("SELECT * FROM messages ORDER BY date",$db); $mes1 = mysql_fetch_array($tmp1);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху $myr2 = mysql_query("SELECT * FROM users ORDER BY id",$db); $res2 = mysql_fetch_array($myr2);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху do { $id_res = $res2['id']; $name_res = $res2['name']; $sname_res = $res2['sname']; printf("%s| %s %s<br>" ,$id_res,$name_res,$sname_res); do { $author_res = $mes1['author']; $date_res = $mes1['date']; $poluc_res = $mes1['poluchatel']; $text_res = $mes1['text']; printf("Автор: %s| Получатель: %s| Текст: %s| Дата: %s|<br> ",$author_res, $poluc_res,$text_res,$date_res ); } while($mes1 = mysql_fetch_array($tmp1)); } while($res2 = mysql_fetch_array($myr2)); Он выводит сначала правильно, потом пустые значения: Код (Text): Сообщения: 1| Евгений Расторгуев Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| 2| Василий пупкин Автор: | Получатель: | Текст: | Дата: | 3| Евгений22 Расторгуев2 Автор: | Получатель: | Текст: | Дата: | Нужно, что бы после "Василий Пупкин", вывело то, что вывелось после Евгений Расторгуев, а не пустые переменные. Это цикл в цикле)
Почему бы не спросить это у Попова, от которого вы этот ду-вайл подчерпнули? Постоянно такая фигня. Хрени людей учит он, а проблемы, с этим связанные, решаем мы. Не используйте ду-вайл.
https://secure.php.net/manual/ru/mysqli-stmt.execute.php ещё не понятна какая структура в базе, возможно через join одним запросом можно получить все нужные данные
Переделал цикл: PHP: while($res2 = mysql_fetch_array($myr2)) { $id_res = $res2['id']; $name_res = $res2['name']; $sname_res = $res2['sname']; printf("%s| %s %s<br>" ,$id_res,$name_res,$sname_res); while($mes1 = mysql_fetch_array($tmp1)) { $author_res = $mes1['author']; $date_res = $mes1['date']; $poluc_res = $mes1['poluchatel']; $text_res = $mes1['text']; printf("Id: %s| Автор: %s| Получатель: %s| Текст: %s| Дата: %s|<br> ",$mes1['id'],$author_res, $poluc_res,$text_res,$date_res ); } } Теперь он мне выдает:начинает со второго пользователя в базе(фиксанул тем, что создал пользователя с id=0) данныеид, имя, фамилию, как положено), далее проходит цикл, выводит все сообщения из другой базы (тут все в порядке, начинает только тоже со 2 строки), а потом просто игнорит второй цикл и выводит список не выведенных пользователей, но без сообщений. Вот как выглядит: Код (Text): Сообщения: 1| Евгений Расторгуев Id: 1| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00| Id: 2| Автор: 1| Получатель: 2| Текст: Ау| Дата: 2016-11-23 00:00:00| Id: 3| Автор: 1| Получатель: 2| Текст: Ты тут?| Дата: 2016-11-23 00:00:00| Id: 4| Автор: 2| Получатель: 1| Текст: Привет. Да| Дата: 2016-11-23 00:00:00| Id: 5| Автор: 1| Получатель: 2| Текст: Как дела?| Дата: 2016-11-23 16:31:32| Id: 6| Автор: 2| Получатель: 1| Текст: Норм. ты как?| Дата: 2016-11-23 16:32:39| Id: 7| Автор: 2| Получатель: 3| Текст: 2322333| Дата: 2016-11-23 18:05:10| Id: 8| Автор: 2| Получатель: 3| Текст: 1| Дата: 2016-11-23 18:06:41| Id: 9| Автор: 2| Получатель: 1| Текст: 121| Дата: 2016-11-23 18:07:05| Id: 10| Автор: 3| Получатель: 1| Текст: Привет| Дата: 2016-11-23 20:44:34| Id: 11| Автор: 2| Получатель: 3| Текст: Хей!| Дата: 2016-11-23 20:44:45| Id: 12| Автор: 2| Получатель: 1| Текст: 3213| Дата: 2016-11-24 20:26:29| Id: 13| Автор: 2| Получатель: 3| Текст: Сообщение| Дата: 2016-11-24 20:42:00| 2| Василий пупкин 3| Евгений22 Расторгуев2 Что можно сделать в этом случае? P.S. это уже не из Попова взял --- Добавлено --- вот таблица messages Вот таблица users
@apaxican сделай экспорт двух таблиц и выложи сюда в архиве. Составь в PHPMyAdmin запрос с group by и join этого должно хватить, группируем по получателю, с помощью join подтаскиваем имя автора (хотя структура сейчас кривая и возможно этого не нужно). --- Добавлено --- Почитай sql внешние ключи и https://ru.wikipedia.org/wiki/Нормальная_форма