previn md Ответов: 2

Как присоединиться к скрипту count в PHP mysqli


I have one problem I have added unread count filed to my script After display like this message

Fatal error: Call to a member function get_result() on boolean in C:\xampp\htdocs\demo\npm\cons.php on line 110

I have added line

  (SELECT from_id, COUNT(*) unread FROM pm WHERE to_id=? AND read='0' GROUP BY from_id)


my problem here SELECT from_id, I want to add it counting one by one users unread messages showing i want to know to add it to my script.

my database pm table

    id  from_id     to_id    msg               sent_date              read    
    1   2           3        hi how are you?   2019-12-05 04:14:20    1                
    2   3           2        fine              2019-12-05 05:15:58    0               
    3   2           3        hi                2019-12-05 03:20:34    1                  
    4   5           2        hi                2019-12-05 08:30:40    0   
users table

userid username
2      previn
3      rajesh
5      raj
Here is my source code

    <?php
     if (isset($_SESSION['userid'])) {
        $session_id = $_SESSION['userid'];
     }


    $sql = "SELECT *,

    (SELECT username FROM users WHERE userid=from_id) AS from_username,
    (SELECT username FROM users WHERE userid=to_id) AS to_username,
    (SELECT username FROM users WHERE userid=?) AS my_username,
(SELECT from_id, COUNT(*) unread FROM pm WHERE to_id=? AND read='0' GROUP BY from_id)


    FROM pm WHERE from_id = ? or to_id=?   ORDER BY id DESC";


    if ($stmt->prepare($sql)) {
       $stmt->bind_param('iiii', $session_id, $session_id,$session_id,$session_id);
       $stmt->execute();
       $result = $stmt->get_result();
       while ($row = $result->fetch_assoc()) {
          echo $row['from_username'] . " -> " . $row['to_username'] . "<br>";
          echo 'User ' . $row['from_id'] . ' - ' . $row['unread'];
       }
      }
    ?>


Что я уже пробовал:

&низкотемпературный;
I have added line
<code><pre> (SELECT from_id, COUNT(*) unread FROM pm WHERE to_id=? AND read='0' GROUP BY from_id)

Wendelius

Не могли бы вы подробнее рассказать, каков будет ожидаемый результат запроса на основе приведенных в примере данных?

Wendelius

Да, это сообщение об ошибке оператора, но что должен возвращать оператор SQL?

2 Ответов

Рейтинг:
2

Kris Lantz

Не должен:

while ($row = $result->fetch_assoc()) {
    echo $row['from_username'] . " -> " . $row['to_username'] . "<br>";
    echo 'User ' . $row['from_id'] . ' - ' . $row['unread'];
}

быть приложенным, если if-оператор? Я считаю, что ваша ошибка говорит о том, что $result потенциально может быть ложным, что может добавить некоторую странность/ошибку в ваш цикл while.

напр.
while($row=false->fetch_assoc())

Вы бы хотели проверить, что $result имеет значения, прежде чем выполнять функцию fetch_assoc().


Рейтинг:
2

phil.o

Скорее всего, $stmt->execute() возвращенный false, таким образом, заявление не могло быть подготовлено должным образом, и get_result() метод не может быть вызван против него.
Попробуй

if ($stmt->execute()) {
   $result = $stmt->get_result();
   while ($row = $result->fetch_assoc()) {
      echo $row['from_username'] . " -> " . $row['to_username'] . "<br>";
      echo 'User ' . $row['from_id'] . ' - ' . $row['unread'];
   }
}

Еще одна деталь, которая может быть проблемой: если read колонна из pm таблица является битовым типом, вы не должны заключать значение между одинарными кавычками. Одинарные кавычки предназначены только для строковых типов. Попробуй
SELECT from_id, COUNT(*) unread FROM pm WHERE to_id=? AND read=0 GROUP BY from_id
вместо.


previn md

это не работает

previn md

пожалуйста, вы можете мне помочь, я много пробовал

phil.o

Я мог бы попытаться помочь, но вам придется быть гораздо более конкретным в отношении того, что означает "не работает". Я не волшебник, и я не могу читать твои мысли или видеть твой экран.

previn md

выводится примерно следующее сообщение Fatal error: вызов функции-члена get_result() на boolean in C:\xampp\htdocs\demo\npm\cons.php на линии 120

previn md

проблема выбора from_id, и группы, from_id, когда я убрал это работает, но все пользователи непрочитанные сообщения же такой пользователь1 непрочитанному сообщению 2, пользователь2 непрочитанному сообщению 2, пользователь3 непрочитанному сообщению 2, Дисплей же

previn md

Я хочу получить вот такое непрочитанное сообщение user1 4, непрочитанное сообщение user2 7, непрочитанное сообщение user3 1

phil.o

После перечитывания вашего оригинального сообщения и вашего дополнительного объяснения в третий раз мне все еще трудно понять, какого именно результата вы ожидаете от своего запроса. Вы, кажется, выбираете все столбцы каждого сообщения (the SELECT *), но затем требуется подсчет в каждой строке сообщения количества непрочитанных сообщений для целевого объекта текущего сообщения. Затем вы добавляете имена исходных и целевых пользователей с помощью отдельных запросов, когда вы можете просто объединить обе таблицы, чтобы получить информацию; это было бы гораздо более разумно, чем выдавать подзапросы самостоятельно.
Пожалуйста, используйте зеленый цвет Улучшить вопрос виджет, который появляется при наведении курсора на ваш вопрос, и четко определить, какие столбцы вы хотите в вашем конечном результате.

previn md

пожалуйста помоги мне Братан

previn md

Я хочу подсчитать одно за другим непрочитанные сообщения пользователей, когда я присоединился к этому скрипту, он не работает SELECT from_id, COUNT(*) unread FROM pm WHERE to_id=? И читать=0 группы, from_id, но этот скрипт работает без другой скрипт как скрипт работает, но после того, как зарегистрирован этот скрипт не работает фэттал отображение сообщений об ошибках, пожалуйста, помогите мне я уже много попробовала