За последние 24 часа нас посетили 34094 программиста и 1742 робота. Сейчас ищут 993 программиста ...

цикл do-while не все выводит

Тема в разделе "PHP для новичков", создана пользователем apaxican, 24 ноя 2016.

  1. apaxican

    apaxican Новичок

    С нами с:
    21 ноя 2016
    Сообщения:
    9
    Симпатии:
    0
    Всем привет. Помогите разобраться с ошибкой.
    Есть база данных с двумя таблицами: messages и users.
    нужно вывести всех пользователей, с которыми определенный пользователь(чья страница открыта) когда либо переписывался.
    Есть цикл do-while:
    PHP:
    1. $tmp1 = mysql_query("SELECT * FROM messages  ORDER BY date",$db);
    2. $mes1 = mysql_fetch_array($tmp1);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху
    3.  
    4. $myr2 = mysql_query("SELECT * FROM users ORDER BY id",$db);
    5. $res2 = mysql_fetch_array($myr2);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху
    6.  
    7.  
    8. do
    9.             {
    10.  
    11. $id_res = $res2['id'];
    12. $name_res = $res2['name'];
    13. $sname_res = $res2['sname'];
    14.  
    15.  
    16.  
    17.      printf("%s| %s %s<br>"
    18.  
    19. ,$id_res,$name_res,$sname_res);
    20. do
    21. {
    22. $author_res = $mes1['author'];
    23. $date_res = $mes1['date'];
    24. $poluc_res = $mes1['poluchatel'];
    25. $text_res = $mes1['text'];
    26.  
    27. printf("Автор: %s| Получатель: %s| Текст: %s| Дата: %s|<br>
    28. ",$author_res, $poluc_res,$text_res,$date_res
    29. );
    30.  
    31. }
    32. while($mes1 = mysql_fetch_array($tmp1));
    33.  
    34.  
    35.  
    36.  
    37.      
    38. }
    39.  
    40.          
    41.            
    42. while($res2 = mysql_fetch_array($myr2));
    Он выводит сначала правильно, потом пустые значения:

    Код (Text):
    1.  Сообщения:
    2. 1| Евгений Расторгуев
    3. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    4. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    5. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    6. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    7. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    8. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    9. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    10. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    11. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    12. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    13. Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    14. 2| Василий пупкин
    15. Автор: | Получатель: | Текст: | Дата: |
    16. 3| Евгений22 Расторгуев2
    17. Автор: | Получатель: | Текст: | Дата: |
    Нужно, что бы после "Василий Пупкин", вывело то, что вывелось после Евгений Расторгуев, а не пустые переменные. Это цикл в цикле)
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Почему бы не спросить это у Попова, от которого вы этот ду-вайл подчерпнули? Постоянно такая фигня. Хрени людей учит он, а проблемы, с этим связанные, решаем мы.

    Не используйте ду-вайл.
     
  3. apaxican

    apaxican Новичок

    С нами с:
    21 ноя 2016
    Сообщения:
    9
    Симпатии:
    0
    Я не знаю Попова)) на Ruseller нашел. А что использовать? если можно, пример)
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    https://secure.php.net/manual/ru/mysqli-stmt.execute.php

    ещё не понятна какая структура в базе, возможно через join одним запросом можно получить все нужные данные
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Руселлер - сайт Попова.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    бро, руселлер это и есть Попов ))) забудь туда дорогу.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    upload_2016-11-24_20-55-59.png
     
    MouseZver нравится это.
  8. apaxican

    apaxican Новичок

    С нами с:
    21 ноя 2016
    Сообщения:
    9
    Симпатии:
    0
    Переделал цикл:
    PHP:
    1. while($res2 = mysql_fetch_array($myr2))
    2. {
    3.  
    4. $id_res = $res2['id'];
    5. $name_res = $res2['name'];
    6. $sname_res = $res2['sname'];
    7.  
    8.  
    9.  
    10.      printf("%s| %s %s<br>"
    11.  
    12. ,$id_res,$name_res,$sname_res);
    13.     while($mes1 = mysql_fetch_array($tmp1))
    14.     {
    15.     $author_res = $mes1['author'];
    16.     $date_res = $mes1['date'];
    17.     $poluc_res = $mes1['poluchatel'];
    18.     $text_res = $mes1['text'];
    19.  
    20.     printf("Id: %s| Автор: %s| Получатель: %s| Текст: %s| Дата: %s|<br>
    21.    ",$mes1['id'],$author_res, $poluc_res,$text_res,$date_res
    22.     );
    23.  
    24.     }
    25. }
    Теперь он мне выдает:начинает со второго пользователя в базе(фиксанул тем, что создал пользователя с id=0) данные:(ид, имя, фамилию, как положено), далее проходит цикл, выводит все сообщения из другой базы (тут все в порядке, начинает только тоже со 2 строки), а потом просто игнорит второй цикл и выводит список не выведенных пользователей, но без сообщений.
    Вот как выглядит:
    Код (Text):
    1.  Сообщения:
    2. 1| Евгений Расторгуев
    3. Id: 1| Автор: 3| Получатель: 2| Текст: Привет| Дата: 2016-11-23 00:00:00|
    4. Id: 2| Автор: 1| Получатель: 2| Текст: Ау| Дата: 2016-11-23 00:00:00|
    5. Id: 3| Автор: 1| Получатель: 2| Текст: Ты тут?| Дата: 2016-11-23 00:00:00|
    6. Id: 4| Автор: 2| Получатель: 1| Текст: Привет. Да| Дата: 2016-11-23 00:00:00|
    7. Id: 5| Автор: 1| Получатель: 2| Текст: Как дела?| Дата: 2016-11-23 16:31:32|
    8. Id: 6| Автор: 2| Получатель: 1| Текст: Норм. ты как?| Дата: 2016-11-23 16:32:39|
    9. Id: 7| Автор: 2| Получатель: 3| Текст: 2322333| Дата: 2016-11-23 18:05:10|
    10. Id: 8| Автор: 2| Получатель: 3| Текст: 1| Дата: 2016-11-23 18:06:41|
    11. Id: 9| Автор: 2| Получатель: 1| Текст: 121| Дата: 2016-11-23 18:07:05|
    12. Id: 10| Автор: 3| Получатель: 1| Текст: Привет| Дата: 2016-11-23 20:44:34|
    13. Id: 11| Автор: 2| Получатель: 3| Текст: Хей!| Дата: 2016-11-23 20:44:45|
    14. Id: 12| Автор: 2| Получатель: 1| Текст: 3213| Дата: 2016-11-24 20:26:29|
    15. Id: 13| Автор: 2| Получатель: 3| Текст: Сообщение| Дата: 2016-11-24 20:42:00|
    16. 2| Василий пупкин
    17. 3| Евгений22 Расторгуев2
    Что можно сделать в этом случае?
    P.S. это уже не из Попова взял :D
    --- Добавлено ---
    вот таблица messages
    [​IMG]
    Вот таблица users
    [​IMG]
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @apaxican сделай экспорт двух таблиц и выложи сюда в архиве.
    Составь в PHPMyAdmin запрос с group by и join этого должно хватить, группируем по получателю, с помощью join подтаскиваем имя автора (хотя структура сейчас кривая и возможно этого не нужно).
    --- Добавлено ---
    Почитай sql внешние ключи и https://ru.wikipedia.org/wiki/Нормальная_форма