Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

197
Visualizações
MySQL - Recuento de unión interna de dos tablas

Tengo dos mesas:

Categoría

| identificación | nombre | caso |

Artículos

| identificación | nombre | ID de categoría | <-- esta es la columna de relación

Estoy tratando de mostrar todas las categorías con su respectivo número de artículos, así:

Nombre de categoría: Resumen [15 elementos]

Estoy usando este código:

 $getcategory = mysqli_query($con, " SELECT c.name , c.id , c.case , i.id , COUNT(i.categoriaid) AS photos FROM category c JOIN items i ON c.id = i.categoriaid WHERE i.id != '' ORDER BY c.id ASC "); while ($showcategory = mysqli_fetch_array($getcategory)) { echo ' <div class="category-container"> <div class="category-title">'.$showcategory['name'].'</div> <div class="category-img-container"> <div class="img-stretch"><img src="'.$showcategory['case'].'" alt=""/></div> </div> <div class="category-count"><div><span class="destaque alto">[ '.$showcategory['photos'].' ]</span> telas</div></div> </div> '; }

Pero esto no funciona. ¿Qué ocurre?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La consulta no se ve bien. Hay un agregado en la lista SELECT y no hay cláusula GROUP BY. Si la consulta devuelve un resultado, será una sola fila. Y no tiene sentido devolver elementos no agregados en la lista SELECT, si solo vamos a devolver COUNT.

Suponiendo que id es la CLAVE PRIMARIA (o una CLAVE ÚNICA) en la tabla de category , si sql_mode no incluye ONLY_FULL_GROUP_BY, podríamos hacer que esto se ejecute:

 SELECT c.name , c.id , c.case , MIN(i.id) AS min_id , MAX(i.id) AS max_id , COUNT(i.categoriaid) AS photos FROM category c LEFT JOIN items i ON i.categoriaid = c.id AND i.id <> '' GROUP BY c.id ORDER BY c.id

Si sql_mode incluye ONLY_FULL_GROUP_BY, podemos usar funciones agregadas (por ejemplo, MIN o MAX) alrededor de c.name y c.case, o podemos extender la cláusula GROUP BY para incluir esas columnas.

 SELECT c.name , c.id , c.case , MIN(i.id) AS min_id , MAX(i.id) AS max_id , COUNT(i.categoriaid) AS photos FROM category c LEFT JOIN items i ON i.categoriaid = c.id AND i.id <> '' GROUP BY c.id , c.name , c.case ORDER BY c.id

Sin una especificación, solo estamos adivinando. Podría haber un número de cosas "incorrectas" con esta declaración. Como una lista de ejemplo: referencias de tabla no válidas, referencias de columna no válidas (¿hay una categoriaid de nombre de columna en la tabla de elementos? Lo tomé del SQL en la pregunta).

Le sugiero que lleve la escritura de SQL a otro entorno y obtenga el SQL escrito y probado. Luego, vuelva a incluir esa declaración en su código PHP. (Divide y conquistaras.)

Además, en el código PHP, podemos probar si la ejecución de la consulta fue exitosa, probando el retorno de mysqli_query . Si es FALSO, entonces sabemos que no tuvo éxito y podemos recuperar el error con la función mysqli_error .

 $sql = "SELECT ... "; if( !$getcategory = mysqli_query($con,$sql) ) { // statement execution was not successful die mysqli_error($con); }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda