Problema con query PHP y mysqli, ayuda por favor

  • Autor Autor pa3lo022
  • Fecha de inicio Fecha de inicio
P

pa3lo022

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todos, les explico, termine un proyecto en PHP y mysqli, cuando lo instalaron las personas de computos que manejan los servidores les dio un error (no se que error les dio porque no me lo han pasado) cuando se usa la clausula GROUP BY, el problema es que tengo una query que me esta volviendo loco cuando le saco la clausula group, me podrían ayudar por favor?

mi query sin el GROUP BY es:
Insertar CODE, HTML o PHP:
SELECT n.idnew, n.title, ns.news_idnew, nm.news_idnew, m.idmultimedias, m.photo, m.photo_dir, 
nm.multimedias_idmultimedias
FROM news_has_sections ns
INNER JOIN news n
ON ns.news_idnew = n.idnew
INNER JOIN news_has_multimedias nm
ON nm.news_idnew = n.idnew
INNER JOIN multimedias m
ON m.idmultimedias = nm.multimedias_idmultimedias
WHERE sections_idsections = '6' 
AND n.active = '1';

y el resultado es:
Screenshot_1.webp

Si se fijan me trae los mismos items repetidos tantas veces como imagenes hay, yo quiero que solo me traiga uno de cada uno.

Me pueden dar una mano por favor

muchas gracias
 
Hola.

Lo primero que deberías aclarar es por qué quieres agrupar, es decir, ¿quieres contar el número de ficheros multimedia que tiene cada noticia? Si cada noticia tiene N multimedias asociados y haces el JOIN con la tabla de multimedias, siempre te saldrá la noticia tantas veces como multimedia tenga. Deduzo que lo que hace esa query es listar sólo las noticias que tengan secciones y multimedia.

También debes tener en cuenta que esa query provocará que no te salgan noticias si estas no tienen multimedia asociado (creo), considera el uso de LEFT JOIN, RIGHT JOIN.

Lo segundo es que deberías poner la sentencia GROUP BY que te dicen que da error.

La cuestión es que tienes que decidir qué datos quieres sacar. Como te dije antes, si una noticia tiene N multimedias, te saldrá N repeticiones de cada una. Es como una tabla de personas que tienen N hijos, una persona puede ser padre de dos hijos y saldrá su nombre dos veces si la relacionas con sus hijos; uno vez por cada hijo.

De ahí que te dijera antes si realmente necesitas hacer join con multimedias ¿es necesario sacar alguna información de esto además de la noticia? Tienes que llegar a un consenso.

Efectivamente puedes usar esa query con GROUP BY para sacar sólo una noticia, pero necesitas una función de agrupación. Ejemplo:

Insertar CODE, HTML o PHP:
SELECT n.idnew, n.title, [B]count[/B](m.idmultimedias)
FROM news_has_sections ns
INNER JOIN news n
ON ns.news_idnew = n.idnew
INNER JOIN news_has_multimedias nm
ON nm.news_idnew = n.idnew
INNER JOIN multimedias m
ON m.idmultimedias = nm.multimedias_idmultimedias
WHERE sections_idsections = '6' 
AND n.active = '1'
GROUP BY n.idnew, n.title

La sentencia que he escrito te dirá cuántos multimedia tiene cada noticia y sólo saldrá esta una vez. No puedo probar esto in situ, así que disculpa si no está del todo bien escrita. El caso es que debes usar GROUP BY de esa forma. No puedes mostrar el contenido de los campos que agrupas.
 
Atrás
Arriba