За последние 24 часа нас посетили 17516 программистов и 1714 роботов. Сейчас ищут 1495 программистов ...

я запутался

Тема в разделе "PHP и базы данных", создана пользователем SeApps, 3 апр 2018.

  1. SeApps

    SeApps Новичок

    С нами с:
    3 апр 2018
    Сообщения:
    27
    Симпатии:
    1
    Добрый всем день.

    Есть база. В ней есть таблица s_messages. В ней есть поля: id // понятно // message // тоже понятно // beginner // id отправителя // follower // id получателя // date;

    Мне нужно,
    что бы на странице отображались
    Сообщения с именами, id которых (beginner или follower) не совпадают с id, который я вытаскиваю из базы с помощью сессии.

    Только один раз на каждое имя(то есть id).

    Реализовано тут: http://bytenet.seapps.ru/index.php?page=3

    Я нуб и знаю это, (пожалуйста) не надо меня ругать за кривой код.
    Только конструктив)

    Сам код:

    PHP:
    1. if($_SESSION['access'] == 10){
    2. $res = mysqli_query($dbConnect, "SELECT * FROM `s_users` WHERE pin = ".$_SESSION['pin']."");
    3.             if ($res) {
    4.                while($row = mysqli_fetch_assoc($res)){
    5.                    $id = $row['id'];
    6.                    $result = mysqli_query($dbConnect, "SELECT * FROM `s_messages` WHERE (beginner = ".$row['id']." OR follower = ".$row['id'].") GROUP BY follower desc");
    7.                }}
    8.            
    9.                if ($result) {
    10.                while($rower = mysqli_fetch_assoc($result)){
    11.                    if($rower['beginner']!= $id){
    12.                        $resultic = mysqli_query($dbConnect, "SELECT * FROM `s_users` WHERE id = ".$rower['beginner']."");
    13.                    } else {
    14.                        $resultic = mysqli_query($dbConnect, "SELECT * FROM `s_users` WHERE id = ".$rower['follower']."");
    15.                    }
    16.                    if ($resultic) {
    17.                while($roweric = mysqli_fetch_assoc($resultic)){
    18.              
    19. echo '<div class="persMes">
    20. <a href="index.php?page=4&mes='.$roweric['id'].'&name2='.$roweric['name'].'">
    21.    <div>'.$roweric['name'].'</div>
    22.    <div>';
    23.     //
    24.     $result3 = mysqli_query($dbConnect, "SELECT * FROM `s_messages` WHERE (beginner = ".$id." AND follower = ".$roweric['id'].") OR (beginner = ".$roweric['id']." AND follower = ".$id.") ORDER BY id DESC LIMIT 1");
    25.     if ($result3) {
    26.            while($rower3 = mysqli_fetch_assoc($result3)){
    27.              echo $rower3['message'];
    28.          
    29.            }}
    30.     //
    31.     echo '</div>
    32.    <div>'.$rower['date'].'</div>
    33. </a>
    34. </div>';
    35. $nameMes = $roweric['name'];
    36. }
    37. }
    38.  
    39. }
    40. }
     
  2. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Скачай себе программу heidisql и играйся с запросами, нет ни чего сложного в этом. У тебя 4 запроса есть стало быть шаришь. И вообще тыкать через пхп базу, не до конца разобравшись это тяжко, сложно что то понять.
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    выполнение запросов в цикле - большое зло
    вот это:
    Код (Text):
    1. while($rower = mysqli_fetch_assoc($result)){
    2.                    if($rower['beginner']!= $id){
    3.                        $resultic = mysqli_query($dbConnect, "SELECT * FROM `s_users` WHERE id = ".$rower['beginner']."")
    А вообще лучше обрисуй конкретнее задачу и таблицы которые связаны .... все это делается одним запросом
     
  4. SeApps

    SeApps Новичок

    С нами с:
    3 апр 2018
    Сообщения:
    27
    Симпатии:
    1
    Нужно, что бы на странице были только те сообщения, у которых разные имена.

    Помимо того, в выведенных сообщениях нужно указать ячейки поля сообщения.

    Про зло) Я понимаю. Не можете сказать, как правильно?
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    правильная постановка вопроса - 50% решения (с)

    я спрашиваю про ВСЮ задачу. .а не про ту е часть , которую как вы думаете нужно сделать для решения ВСЕЙ задачи
    вот что у вас за таблица пользователей? зачем вы ее в цикле пробегаете?

    Грубо гворя - что вы хотите видеть на странице вообще? - историю переписки конкретного пользователя, все диалоги, что?
     
  6. SeApps

    SeApps Новичок

    С нами с:
    3 апр 2018
    Сообщения:
    27
    Симпатии:
    1

    Диалоги. Не всю переписку, а разные переписки от разных людей, где будут сведения о последнем сообщении, отправленном конкретному пользователю.
     
  7. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    используй команду SELECT DISTINCT указываешь поле пользователя и параметр DESC с полем сообщения. Таким образом ты получишь список всех пользователей без дуближа а DESC позволит тебе отобразить последнею запись переписки.