Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Misma consulta pero resultados distintos

Estas en el tema de Misma consulta pero resultados distintos en el foro de Mysql en Foros del Web. He adquirido el hábito de que antes de crear una consulta en un documento PHP la pruebo en MYSQL Workbench. La siguiente consulta ejecutada en ...
  #1 (permalink)  
Antiguo 15/04/2014, 15:33
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Misma consulta pero resultados distintos

He adquirido el hábito de que antes de crear una consulta en un documento PHP la pruebo en MYSQL Workbench.

La siguiente consulta ejecutada en Workbench

Código SQL:
Ver original
  1. SELECT
  2.                                     C.idcategorie,
  3.                                     C.iduser,
  4.                                     C.categorie,
  5.                                     S.idsubcategorie,
  6.                                     S.idcategorie,
  7.                                     S.subcategorie,
  8.                                     COUNT(S.idsubcategorie) AS count_subc
  9.                                 FROM
  10.                                         categories C
  11.                                 LEFT JOIN
  12.                                         subcategories S
  13.                                 ON
  14.                                         C.idcategorie=S.idcategorie
  15.                                 GROUP BY
  16.                                         C.idcategorie

Genera este resultado



Pero al ejecutar la consulta con PHP resulta que el idcategorie de Deportes no aparece, devuelve NULL. No logro comprender por qué sucede esto.

Cita:
array(2) {
[0]=>
array(6) {
["idcategorie"]=>
string(1) "1"
["iduser"]=>
string(1) "1"
["categorie"]=>
string(13) "Programación"
["idsubcategorie"]=>
string(1) "1"
["subcategorie"]=>
string(3) "PHP"
["count_subc"]=>
string(1) "4"
}
[1]=>
array(6) {
["idcategorie"]=>
NULL
["iduser"]=>
string(1) "1"
["categorie"]=>
string(7) "Deporte"
["idsubcategorie"]=>
NULL
["subcategorie"]=>
NULL
["count_subc"]=>
string(1) "0"
}
}
El idcategorie es esencial que pueda obtenerlo ya que para la edición de categories necesito indicar en otra consulta qué idcategorie estoy editando o borrando o para la edición de subcategories necesito indicar a qué otra categorie estoy asignando la subcategorie, mediante el idcategorie.

¿Alguien puede ayudarme con esto?
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 15/04/2014, 17:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Misma consulta pero resultados distintos

Tiene todo el aspecto de un error de la librería, pero eso no tendría nada que ver con MySL, sino con PHP.
para ser concreto, si la query funciona bien en MySQL Workbench, entonces no es un problema de la consulta, ni de BBDD. Yo revisaría si es un BUG de la librería.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/04/2014, 17:41
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Misma consulta pero resultados distintos

Tienes dos columnas llamadas "idcategorie", una en cada tabla, deberias renombrar al menos una de ellas con un alias. u obtener el resultado desde php en un array con indices numericos para que no sobreescriba el valor del elemento con la llave "idcategorie"
  #4 (permalink)  
Antiguo 15/04/2014, 18:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Misma consulta pero resultados distintos

Eso es cierto...
¿Para qué invocas el mismo dato de ambas tablas?
CUando usas LEFT JOIN uno de ellos vendrá nulo, pero la librería de PHP no se mneja bien con columnas de nombre duplicado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 16/04/2014, 01:12
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Misma consulta pero resultados distintos

Parece que tienen razón, pero no entiendo por qué se sobreescribe si pertenecen a tablas distintas :S

En realidad selecciono los datos de una tabla (categories C) y para contar (COUNT) cuantas subcategories tiene cada categorie selecciono (LEFT JOIN) todas aquellas subcategories cuya columna idcategorie concuerde con el idcategorie de categories, por eso la necesidad de LEFT.

Lo pensé así, tal vez me equivoqué en el planteamiento de el diseño de las tablas al nombrar las columnas o tal vez también me equivoqué en la consulta.

¿Ustedes cómo lo harían?

Muchísimas gracias por su ayuda!!! :D
__________________
Ayúdame a hacerlo por mi mismo.
  #6 (permalink)  
Antiguo 16/04/2014, 03:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Misma consulta pero resultados distintos

Cita:
Parece que tienen razón, pero no entiendo por qué se sobreescribe si pertenecen a tablas distintas :S
Porque PHP no entiende ni maneja tablas de MySQL. Lo que PHP recibe es un array, no una tabla. Es en la recuperación del array donde se produce el problema.
Ten en cuenta que el par clave/valor de un array no puede tener dos valores para la misma clave.
Cita:
Lo pensé así, tal vez me equivoqué en el planteamiento de el diseño de las tablas al nombrar las columnas o tal vez también me equivoqué en la consulta.
TE equivocaste en la consulta. No se deben repetir los nombres de las columnas, ni aunque sean el mismo. Primero porque replicas información sin necesidad, saturando el buffer de datos basura. Y segundo porque generas este tipo de problemas en los lenguajes.
Si el mismo intento lo hubieses hecho en .Net, habrías recibido una excepción por nombre de columna inconsistente.

Haz lo que te dice @darkasecas: Quita la columna que invocas de la segunda tabla. No la necesitas para nada.
Código MySQL:
Ver original
  1.    C.idcategorie,
  2.    C.iduser,
  3.    C.categorie,
  4.    S.idsubcategorie,
  5.    S.subcategorie,
  6.    COUNT(S.idsubcategorie) count_subc
  7.    categories C
  8.    LEFT JOIN
  9.    subcategories S
  10.    ON C.idcategorie=S.idcategorie
  11.    C.idcategorie
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 16/04/2014 a las 04:19
  #7 (permalink)  
Antiguo 16/04/2014, 03:38
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Misma consulta pero resultados distintos

Muchas gracias gnzsoloyo! :D así lo haré
__________________
Ayúdame a hacerlo por mi mismo.

Etiquetas: distintos, join, null, php, resultados, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:34.