Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consulta en PHP, funciona en SQL phpmyadmin

Estas en el tema de Consulta en PHP, funciona en SQL phpmyadmin en el foro de PHP en Foros del Web. Hola muy buenas. En el proyecto que estoy haciendo, estoy haciendo una consulta a la BD: Código: $select="SELECT ID FROM comerciantes WHERE codigo_postal IN (".$codigo_postal.")"; ...
  #1 (permalink)  
Antiguo 12/05/2014, 02:41
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 10 años, 4 meses
Puntos: 1
Exclamación Consulta en PHP, funciona en SQL phpmyadmin

Hola muy buenas.

En el proyecto que estoy haciendo, estoy haciendo una consulta a la BD:

Código:
$select="SELECT ID FROM comerciantes WHERE codigo_postal IN (".$codigo_postal.")";
$result=mysql_query($select,$conexion) or die ("Error en el SELECT SABER LAS IDS QUE CORRESPONDEN CON ESE CODIGO POSTAL".$select);
$filas=mysql_fetch_array($result);
print_r($select);
var_dump($filas);
$ids=implode(",", $filas);
echo $ids;

En esta consulta, el echo $ids deberia de mostrarme (78,79), que es lo que me sale en la parte SQL de PHPMYADMIN. Pero luego mostrandolo en el web, solamente me sale (78,78).

El resultado del var_dump es:

Código:
array (size=2)
  0 => string '78' (length=2)
  'ID' => string '78' (length=2)
Y el resultado del print_r($select) es:

Código:
SELECT ID FROM comerciantes WHERE codigo_postal IN (30153)
Que es lo que copio en la parte SQL de PHPMYADMIN.

No se si lo estoy haciendo bien para que me de ese resultado (78,78) en vez de (78,79).

Muchas gracias y un saludo.
  #2 (permalink)  
Antiguo 12/05/2014, 04:22
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, 5 meses
Puntos: 2658
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

El problema no está en la etapa de la query, sino muy probablemente en el momento en que muestras los datos obtenidos.
Si
Cita:
SELECT ID FROM comerciantes WHERE codigo_postal IN (30153)
corriendolo en phpMyadmin devuelve dos registros, los mismos registros obtendrás en la aplicación. No debe haber diferencias. Por consecuencia el error está en otra parte.

Postea la parte del script donde muestras la información obtenida.
__________________
¿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 12/05/2014, 04:50
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Con mysql_fetch_array obtienes 1 row.. tienes q meterlo en un bucle para obtener todos los rows...

Código PHP:

while($filas=mysql_fetch_array($result)) echo $filas['ID']; 
Saludos
__________________
>> Eleazan's Source
>> @Eleazan
  #4 (permalink)  
Antiguo 12/05/2014, 05:27
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El problema no está en la etapa de la query, sino muy probablemente en el momento en que muestras los datos obtenidos.
Si
corriendolo en phpMyadmin devuelve dos registros, los mismos registros obtendrás en la aplicación. No debe haber diferencias. Por consecuencia el error está en otra parte.

Postea la parte del script donde muestras la información obtenida.
Es que necesito esos datos (78,79) para enlazarlo con otra consulta:

Código:
$select="SELECT count(*) FROM ofertas WHERE id_comerciante IN (".$ids.") AND fecha_final > '$fecha_actual'";
$result=mysql_query($select,$conexion) or die ("Error en el SELECT PARA LA INSIGNIA".$select);
$filas=mysql_num_rows($result);
print_r($select);
echo "<br />";
echo $filas;
El print_r($select) me muestra:
Código:
SELECT count(*) FROM ofertas WHERE id_comerciante IN (78,78) AND fecha_final > '2014-05-12'
Por lo tanto detecto que no funciona bien, ya que no obtengo el (78,79) que obtengo del PHPMYADMIN.

Y en echo $filas me sale 1, y en PHPMYADMIN 14. Por lo tanto el error viene desde atras, con el tema de (78,79)...

Un saludo.
  #5 (permalink)  
Antiguo 12/05/2014, 05:28
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Cita:
Iniciado por Eleazan Ver Mensaje
Con mysql_fetch_array obtienes 1 row.. tienes q meterlo en un bucle para obtener todos los rows...

Código PHP:

while($filas=mysql_fetch_array($result)) echo $filas['ID']; 
Saludos
¿No seria con mysql_num_rows?

Un saludo.
  #6 (permalink)  
Antiguo 12/05/2014, 05:43
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, 5 meses
Puntos: 2658
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Cita:
Iniciado por pixonjr Ver Mensaje
Es que necesito esos datos (78,79) para enlazarlo con otra consulta:

Código:
$select="SELECT count(*) FROM ofertas WHERE id_comerciante IN (".$ids.") AND fecha_final > '$fecha_actual'";
$result=mysql_query($select,$conexion) or die ("Error en el SELECT PARA LA INSIGNIA".$select);
$filas=mysql_num_rows($result);
print_r($select);
echo "<br />";
echo $filas;
El print_r($select) me muestra:
Código:
SELECT count(*) FROM ofertas WHERE id_comerciante IN (78,78) AND fecha_final > '2014-05-12'
Por lo tanto detecto que no funciona bien, ya que no obtengo el (78,79) que obtengo del PHPMYADMIN.

Y en echo $filas me sale 1, y en PHPMYADMIN 14. Por lo tanto el error viene desde atras, con el tema de (78,79)...

Un saludo.
Entonces estas armando mal la consulta porque el valor 79 no esta llegando en la variable.
Y por favor Postea TODO EL CÓDIGO
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 12/05/2014, 05:55
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Cita:
Iniciado por pixonjr Ver Mensaje
¿No seria con mysql_num_rows?

Un saludo.
Depende de lo q quieras.

¿imprimir resultados de una consulta?
php.net/mysql_fetch_array

¿Saber el número de lineas?
php.net/mysql_num_rows
__________________
>> Eleazan's Source
>> @Eleazan
  #8 (permalink)  
Antiguo 12/05/2014, 05:59
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Código:
<?php
			
			//OBTENER EL NUMERO DE CUPONES ACTIVOS QUE HAY EN ESTA ZONA
			$select="SELECT codigo_postal FROM codigos_postales_zonas WHERE zona='$zona'";
			$result=mysql_query($select,$conexion) or die ("Error en el SELECT PARA OBTENER EL CODIGO POSTAL DE LA ZONA".$select);
			$filas=mysql_fetch_array($result);
			$fecha_actual=date('Y-m-d');
			if(mysql_num_rows($result)>=2){
				
				$codigo_postal=implode(",", $filas);
				
			}
			//$codigo_postal=$filas['codigo_postal'];
			$codigo_postal=30153;
			
			$select="SELECT ID FROM comerciantes WHERE codigo_postal IN (".$codigo_postal.")";
			$result=mysql_query($select,$conexion) or die ("Error en el SELECT SABER LAS IDS QUE CORRESPONDEN CON ESE CODIGO POSTAL".$select);
			$filas_id=mysql_fetch_array($result);
			print_r($select);
			var_dump($filas_id);
			$ids=implode(",", $filas_id);
			
				$select="SELECT count(*) FROM ofertas WHERE id_comerciante IN (".$ids.") AND fecha_final > '$fecha_actual'";
				$result=mysql_query($select,$conexion) or die ("Error en el SELECT PARA MOSTRAR EL NUMERO DE OFERTAS ACTIVAS".$select);
				$filas=mysql_num_rows($result);
				print_r($select);
				echo "<br />";
				echo $filas;
				
				
		
		?>
Ese es el codigo. Cada consulta es para una tabla diferente.

Tabla codigos_postales_zonas: obtengo a partir del nombre de la zona los codigos postales que pertenecen a esa zona.

Tabla comerciantes: tengo todos los comerciantes registrados, y una de las columnas es codigo postal, entonces obtengo todas las ID de los comerciantes que tengan ese codigo postal, en este caso deberia de obtener (78,79).

Tabla ofertas: aqui tengo todas las ofertas creadas por los comerciantes.

Tengo que comprobar que ofertas hay activas a fecha de hoy, dentro de la zona seleccionada. Ya que obtengo las IDs de los comerciantes que hay dentro de esa zona, puedo obtener el numero de ofertas creadas por esas ID y que esten activas.


Esa es la mision de esta parte de codigo. Obtener las ofertas activas, dentro de la zona, para eso necesito saber que comercios hay dentro de esa zona.

La relacion de las tablas es:

codigo_postales_zonas: codigo_postal.
comerciantes: codigo_postal, id_comerciante.
ofertas: id_comerciante.

Un saludo y muchas gracias, espero haberme explicado bien.
  #9 (permalink)  
Antiguo 12/05/2014, 07:31
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, 5 meses
Puntos: 2658
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Llo primero que estoy viendo es que estás haciendo un proceso de consultas demasiado complicado para algo tan simple.
Bastaría con una query de este tipo:
Código MySQL:
Ver original
  1. SELECT o.id_comerciante, count(*) TotalOfertas
  2. FROM ofertas O INNER JOIN comercianes C ON o.id_comerciante = C.id
  3. INNER JOIN codigos_postales_zonas CP ON CP.codigo_postal = C.codigo_postal
  4. WHERE O.fecha_final > CURDATE()
  5.     AND zp.zona='$zona'
Para obtener los ID de los comercianes y la cantidad de ofertas vigentes para una zona determinada.

Me parece que deberías explorar más las capacidades del SQL...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 13/05/2014, 01:39
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Llo primero que estoy viendo es que estás haciendo un proceso de consultas demasiado complicado para algo tan simple.
Bastaría con una query de este tipo:
Código MySQL:
Ver original
  1. SELECT O.id_comerciante, count(*) TotalOfertas
  2. FROM ofertas O INNER JOIN comerciantes C ON O.id_comerciante = C.ID
  3. INNER JOIN codigos_postales_zonas CP ON CP.codigo_postal = C.codigo_postal
  4. WHERE O.fecha_final > CURDATE()
  5. AND CP.zona='$zona'
Para obtener los ID de los comercianes y la cantidad de ofertas vigentes para una zona determinada.

Me parece que deberías explorar más las capacidades del SQL...
Me muestra: 1.

Ese no es el resultado real, seria 14. Es mas cuando pongo la consulta en PHPMYADMIN el resultado que me sale es:

id_comerciante= NULL
TotalOfertas= 0


La consulta la entiendo y si, no estoy tan avanzado en SQL, pero ahora si la entiendo y la comprendo.

Muchas gracias y un saludo.
  #11 (permalink)  
Antiguo 13/05/2014, 20:27
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, 5 meses
Puntos: 2658
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Vamos por partes...
Si con el valor de la zona ($zona), esto:
Código MySQL:
Ver original
  1. SELECT codigo_postal
  2. FROM codigos_postales_zonas
  3. WHERE zona = '$zona';
te devuelve 30153, y con ese valor esto:
Código MySQL:
Ver original
  1. FROM comerciantes
  2. WHERE codigo_postal IN ('.$codigo_postal.');

te regresa los dos valores 78 y 79, y con eso, por medio de esto:
Código MySQL:
Ver original
  1. FROM ofertas
  2. WHERE id_comerciante IN ('.$ids.')
  3.       AND fecha_final > '$fecha_actual';

obtienes 14, esto debería funcionar igual, pero en una sola query:
Código MySQL:
Ver original
  1. SELECT count(*) TotalOfertas
  2.   FROM ofertas
  3. WHERE id_comerciante IN (SELECT ID
  4.                            FROM comerciantes
  5.                           WHERE codigo_postal IN (SELECT codigo_postal
  6.                                                     FROM codigos_postales_zonas
  7.                                                    WHERE zona = '$zona'))
  8.      AND fecha_final > '$fecha_actual';
y esta otra es semánticamente idéntica:
Código MySQL:
Ver original
  1.     O.id_comerciante, COUNT(*) TotalOfertas
  2.     ofertas O
  3.         INNER JOIN
  4.     comerciantes C ON O.id_comerciante = C.ID
  5.         INNER JOIN
  6.     codigos_postales_zonas CP ON CP.codigo_postal = C.codigo_postal
  7.     O.fecha_final > CURDATE()
  8.         AND CP.zona = '$zona'
  9. GROUP BY O.id_comerciante;

Y si las dos finales no te devuelven lo que buscas, entonces tienes una de dos situaciones: a) No tienes registros que cumplan la restricción indicada; b) tienes un error de datos (lo que solemos llamar "datos sucios").
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 15/05/2014, 10:53
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Pues si...el final es que tenia "datos sucios"....

Muchas gracias por todo y lo siento, un saludo.
  #13 (permalink)  
Antiguo 15/05/2014, 13:27
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, 5 meses
Puntos: 2658
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

No problem. Los datos sucios son comunes cuando estás en etapas de desarrollo.
Detectar que eso pasa, y encontrarlos es cuentión de ser paciente.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: phpmyadmin, 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 18:48.