New question

Question:

Date: 20-03-2021 06:21:35 (In Spanish)

Resultado equivocado en mi consulta de SQL[Unresolved]

Estoy tratando de extraer la cantidad de mensajes no leído que existen en cada conversación pero este me esta lanzando un valor equivocado, ya que el primer usuario solo me ha enviado 5 mensajes que yo no he leído y los demás solo me han enviado cada uno 1 solo mensaje. Pero por razón que desconozco como resultado me esta sacando 6 mensajes no leído en cada conversación.

[url=https://ibb.co/g6CBfrX][/url]

He colocado la consulta en el SQL de phpMyAdmin y he descubierto que este me esta sacando la respuesta de forma correcta mas sin embargo en a mi me esta sacando en todos los resultados de las conversaciones el numero 6 NOTA: la primera conversación tiene 6 mensajes no leídos y yo creo que es allí donde esta el problema

[url=https://ibb.co/JCx7Q7R][/url]


Mi objetico:
Quiero mostrar la cantidad de mensajes no leído que tengo en cada conversación

Código SQL que emplee:

 // sacar todos los mensajes no leído de cada conversación
 $stetament = $conexion->prepare(
    "SELECT id_messege, COUNT(id_messege) AS countMessege FROM messege WHERE `view` = 'No' AND id_emisor = $emisor AND id_receptor = $id"
);

$stetament->execute(array());
while ($result = $stetament->fetch()) {   
    // cantidad de mensajes no leídos
    $countMessege = $result['countMessege'];
    $countMessege = (int)$countMessege;
}
Tags: PHP - SQL Votes: 0 - Answers: 4 - Views: 8 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 22-03-2021 04:41:34 Hola Braylin:

    Si la consulta SQL te da el resultado correcto seguramente hay un problema en tu código PHP, ¿podrías publicarlo?
      Votes: 1 - Link answer
     
  • Date: 22-03-2021 12:39:35 Hola Mauro
    Aunque no he solucionado el problema descubrí que la causa es que estoy sacando esa información en una sentencia SQL diferente y no estoy extrayendo la información de la sentencia SQL donde saco los mensajes de las personas con las que he tenido una conversación. Voy a actualizar la pregunta y ha colocar la sentencia SQL que empleo para extraer los mensajes y las personas con las que he tenido una conversación.

    Pero por lo tanto esta es la sentencia SQL que empleo para extraer los mensaje y las personas con las que he hablando y su ultimo mensaje.

     // Sacar los usuarios con los que he tenido una conversacion
     $stetament = $conexion->prepare(
        "SELECT `id_user`, id_emisor, name, surname, photo_profile,
        create_at_messege, messege, view
        FROM (
          SELECT id_user,
            MAX(id_messege) id_messege
            FROM (
              SELECT id_receptor id_user,
                id_messege
                FROM messege
                WHERE id_emisor = $id
              UNION
              SELECT id_emisor id_user,
                id_messege
                FROM messege
                WHERE id_receptor = $id
            ) c1 GROUP BY 1  
        ) c2 JOIN messege USING(id_messege)
        JOIN users USING(id_user)
        ORDER BY id_messege DESC"
    );
    
    $stetament->execute(array());
    $result = $stetament->fetchAll();


    Solo me faltaría añadir la sentencia en esa misma sentencia que me extraiga de la base de datos los mensajes cuyo campo view = 'No' que eso me extraerá los mensajes que aun no han sido leídos pero en realidad quiero la cantidad de mensajes que tengan el campo view = 'No' con las palabra reservada count
      Votes: 0 - Link answer
     
  • Date: 22-03-2021 12:54:31 Pero si volvemos al ejemplo anterior, si te das cuenta me esta notificando 6 mensajes sin leer en cada conversación que tiene mensajes sin leer.

    Pero curiosamente la primera conversación tiene 6 mensajes sin leer lo que me ha llevado a pensar que solo me esta recorriendo el primer usuario de las conversaciones con mensajes sin leer y no me esta mostrando la cifra de mensajes sin leer correcta de las demás conversaciones que tienen de a 1 solo mensaje sin leer cada una excluyendo a la primera.

    Eso me ha llevado a creer que el problema pueda basarse a porque estoy extrayendo esa información en una sentencia SQL diferente en otro archivo y no donde extraigo todos los mensajes y conversaciones de los usuarios.

    Esta es la sentencia para extraer la cantidad de mensajes sin leer de las conversaciones:

     // Sacar la cantidad de mensajes no leido
     $stetament = $conexion->prepare(
        "SELECT id_messege, COUNT(id_messege) AS countMessege FROM messege WHERE `view` = 'No' AND id_emisor = $emisor AND id_receptor = $id"
    );
    
    $stetament->execute(array());
    while ($result = $stetament->fetch()) {   
        // cantidad de mensajes no leidos
        $countMessege = $result['countMessege'];
        $countMessege = (int)$countMessege;
    }
      Votes: 0 - Link answer
     
  • Date: 03-04-2021 07:25:30 Saludos, posiblemente ya lo resolviste...
    Pero el problema aqui es lógico no de sintaxis...
    El detalle que tienes es que el SQL te regresa un vector , y tu solo guardas el valor de uno solo...
    /* cantidad de mensajes no leidos los pones en la variable... */
    $countMessege = $result['countMessege'];
    /* conviertes a entero el valor */
    $countMessege = (int)$countMessege;

    Pero este resultado siempre pondra el valor del ultimo registro, sin haber guardado los anteriores, asi que debes hacerlo de la siguiente forma...
    antes del while, inicializas...
    $countMessege = 0;
    dentro del while.
    /* si lo tienes bien programado cuando insertas la cantidad no necesitas convertir a entero, pero igual si quieres quedaria asi */
    $countMessege = $countMessege + (int)$result['countMessege'];


    Y al final tendras en $countMessege la cantidad total...

    Saludos Terricolas

    Stryfe™
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In