elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Resuelto] JOIN query y mysqli_num_rows
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] JOIN query y mysqli_num_rows  (Leído 2,420 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
[Resuelto] JOIN query y mysqli_num_rows
« en: 22 Octubre 2014, 22:51 pm »

Hola, me gustaría saber como se usa el count cuando necesito juntar varias sentencias en una misma consulta.

Estoy haciendo una lista de fotos con likes: primero necesito obtener todas las imagenes de una tabla, segundo comprobar (row count) si el usuario ya le dio like a la imagen sacando el id de la imagen y por ultimo otro row count para saber cuantos likes tiene la imagen, usando el mismo id de imagen.

Tengo algo así, me falta el count, no estoy seguro de como hacerlo y si usar INNER JOIN:

Código
  1. SELECT user_uploads.* AS uu, members.*, COUNT(img_id, user_id) AS usr_liked, COUNT(img_id) AS total_likes
  2. FROM user_uploads
  3. INNER JOIN members AS m ON m.id = uu.user_id -- owner info
  4. INNER JOIN img_likes AS il ON il.img_id = uu.imgID AND il.user_id = ? -- check if logged in user already liked
  5. INNER JOIN img_likes AS ilt ON ilt.img_id = uu.imgID -- total likes
  6. GROUP BY img_id, user_id
  7. ORDER BY up_time DESC

Tengo un prepared statement y luego con un foreach imprimo todas las imagenes. Pero antes de empezar a imprimir la lista de fotos tengo que comprobar si el usuario ya le dio like a la imagen para cambiar el boton (like o unlike) y sacar el numero total de likes.

Tampoco se, en este caso de juntar tablas, como comprobar el row count, normalmente uso mysqli_num_rows($stmt); pero ahora no se si esto funciona asi.

Código
  1. if ($stmt = $mysqli->prepare("SELECT user_uploads.* AS uu, members.*, COUNT(img_id, user_id) AS usr_liked, COUNT(img_id) AS total_likes
  2.                               FROM user_uploads
  3.                               INNER JOIN members AS m ON m.id = uu.user_id
  4.                               INNER JOIN img_likes AS il ON il.img_id = uu.imgID AND il.user_id = ?
  5.                               INNER JOIN img_likes AS ilt ON ilt.img_id = uu.imgID
  6.                               GROUP BY img_id, user_id
  7.                               ORDER BY up_time DESC")) {
  8. $stmt->bind_param('i', $id);
  9. $Items = $stmt->execute(); // get photos
  10.  
  11. foreach ($Items as $ItemInfo) {
  12.  
  13. $liked = mysqli_num_rows($Items); // como hacerlo ahora?
  14. $total_likes = mysqli_num_rows($Items);
  15.  
  16. $img_id = $aItemInfo['img_id'];
  17.  
  18. if ($liked == 0) {
  19. $like = 'Me gusta';
  20. }
  21. else if ($liked == 1) {
  22. $like = 'Ya no me gusta';
  23. }
  24.  
  25. $photo_list .= '
  26. // lista de fotos
  27. // boton like
  28. <span class="total_likes" id="lik' . $status_id . '">' . $totallikes . '</span>
  29. <a id="' . $total_likes . '" class="likes">' . $like . '</a>
  30. ';
  31. }
  32. }

Si hay alguna forma mejor de hacer esto me gustaría saberla.

Gracias!


« Última modificación: 27 Octubre 2014, 22:30 pm por gAb1 » En línea

dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Re: JOIN query y mysqli_num_rows
« Respuesta #1 en: 26 Octubre 2014, 00:10 am »

Vale, perdona, pero hoy estoy espeso y puesto que hace tres días que nadie te comenta, te dejaré varias info por si te interesan...


Puedes hacer esto, si el valor $ID es 100...:

Código
  1. SELECT ID, name, (SELECT COUNT(*) FROM images WHERE ID_post=$ID) AS total_imagenes FROM POST WHERE ID=$ID

Con esto, al existir sólo una tupla/celda, le estarás dando la cantidad de imágenes que tiene ese post al valor "total_imagenes", en el que caso de que no existieran, el valor retornado sería 0.

Hoy estoy un poco espeso...


En línea




gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: JOIN query y mysqli_num_rows
« Respuesta #2 en: 26 Octubre 2014, 12:28 pm »

Gracias por la respuesta, toda ayuda es bien recibida.

Si no me equivoco ¿eso es una subquery?

Código
  1. SELECT user_uploads.*, -- esta es la tabla de las imagenes
  2.    (SELECT COUNT(*) FROM img_likes WHERE img_id = user_uploads.imgID) AS total_likes
  3. FROM user_uploads
  4. ORDER BY up_time DESC

Lo que hace esa query es, obtener todo de la tabla imagenes (user_uploads) y hacer un count de los likes que tiene cada una de las imágenes, ¿no?

Mi única duda aquí es, si la imagen de la id seleccionada seria la misma id usada para hacer el COUNT, no vaya a ser que muestre los likes de una imagen en otra :P

Y en el código php sería poner esto?

Código
  1. $total_likes = $ItemInfo['total_likes'];

Gracias!

Edito: Vale ya he conseguido que funcione:

Código
  1. SELECT
  2.    uu.*,
  3.    m.*,
  4.    (
  5.        SELECT COUNT(t.*)
  6.        FROM img_likes t
  7.        WHERE t.img_id = uu.imgID AND t.user_id = ?
  8.    ) AS user_likes,
  9.    (
  10.        SELECT COUNT(t.*)
  11.        FROM img_likes t
  12.        WHERE t.img_id = uu.imgID
  13.    ) AS total_likes
  14. FROM user_uploads uu
  15. INNER JOIN members m ON m.id = uu.user_id
  16. ORDER BY uu.up_time DESC

Sobre el rendimiento, ¿será mucha carga para el servidor hacer esos COUNT? (cuando hayan bastante entradas en la tabla)

Gracias!
« Última modificación: 26 Octubre 2014, 18:40 pm por gAb1 » En línea

dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Re: JOIN query y mysqli_num_rows
« Respuesta #3 en: 27 Octubre 2014, 03:13 am »

¿Define bastante?

Si estás en un windows, hasta 300,000 ni tendrás problemas, si estás en un VPS que seguramente usará linux ubunut/centOS tranquilamente puedes tener 3 millones...

Me alegro de haber ayudado... aunque llevara unas cervecitas xDDDD
En línea




gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: JOIN query y mysqli_num_rows
« Respuesta #4 en: 27 Octubre 2014, 22:29 pm »

Eso son muchas!! hehehe

Por supuesto xD

Lo marco como solucionado.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consulta en mysql (join)
Bases de Datos
Aeros 3 6,742 Último mensaje 14 Julio 2010, 14:27 pm
por Novlucker
inner join e cakephp
PHP
hataz 1 4,201 Último mensaje 6 Septiembre 2011, 23:56 pm
por ~ Yoya ~
sql join
Bases de Datos
diego_lp 1 2,985 Último mensaje 15 Octubre 2011, 02:51 am
por fran800m
Pregunta existencial con INNER JOIN
PHP
dimitrix 1 2,018 Último mensaje 19 Febrero 2012, 23:12 pm
por Shell Root
C + MySQL, traspaso de variables a un query de MySQL en C. [Resuelto]
Programación C/C++
GisiNA 8 5,664 Último mensaje 9 Febrero 2014, 11:54 am
por GisiNA
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines