Foros del Web » Programando para Internet » PHP »

Error En La Consulta

Estas en el tema de Error En La Consulta en el foro de PHP en Foros del Web. tengo mi db creada en Mysql que contiene 6 tablas (categoria, ciudad, habitacion, hoteles, regimen y tarifa) la siguiente consulta intento hacer para lograr un ...
  #1 (permalink)  
Antiguo 22/04/2007, 18:55
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 18 años, 4 meses
Puntos: 1
Error En La Consulta

tengo mi db creada en Mysql que contiene 6 tablas (categoria, ciudad, habitacion, hoteles, regimen y tarifa) la siguiente consulta intento hacer para lograr un listado con los nombre de los hoteles, a que ciudad pertenece y de que categoria es. Pero obtengo el siguiente error.
Aviso que intente tambien poniendo el nombre de la tabla adelante de cada campo y tampoco lo soluciono.

Código PHP:
$sql "select * from hoteles, categoria, ciudad
           where nombre like '"
.$letra."%' order by nombre";
   
$sql.= "and cod_categoria = id_cat ";
   
$sql.= "and cod_ciudad = id_ciudad"
error arrojado:

ERROR al agregar la ciudad - 1064:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cod_categoria = id_cat and cod_ciudad = id_ciudad' at line 2

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\BRASIL\brasil\db2\hotel_letra2.php on line 233


Espero me ayuden.
  #2 (permalink)  
Antiguo 22/04/2007, 19:07
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 19 años, 4 meses
Puntos: 6
Re: Error En La Consulta

Prueba asi:

Código:
SELECT * FROM hoteles, categoria, ciudad
        WHERE 
                nombre like '$letra%'
            AND cod_categoria = id_cat
            AND cod_ciudad = id_ciudad
        ORDER BY nombre
Saludos
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #3 (permalink)  
Antiguo 22/04/2007, 19:45
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Error En La Consulta

He probado con tu sugerencia y funcionó, no se todavia cual fue mi error pero me está pasando lo mismo con el resto de las páginas.
Voy a probar lo mismo. Gracias.
  #4 (permalink)  
Antiguo 22/04/2007, 19:51
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 19 años, 4 meses
Puntos: 6
Re: Error En La Consulta

Tu error fue la forma en la que armaste el SELECT. El select, resumiendo, se arma asi:

Código:
SELECT 
   [campos]
   [FROM tablas]
      [WHERE filtro]
      [ORDER BY campo]
Mientras que tu select estaba armado asi:

Código:
SELECT 
   [campos]
   [FROM tablas]
      [WHERE filtro][ORDER BY campo]
      [WHERE filtro]

Saludos!
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #5 (permalink)  
Antiguo 22/04/2007, 22:14
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Error En La Consulta

Gracias por la aclaracion
  #6 (permalink)  
Antiguo 22/04/2007, 23:16
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Error En La Consulta

He probado lo mismo acá y no consigo el mismo resultado. Miro y miro el orden de las cosas y no logro entender como no me sale!!!!!!!

Código PHP:
$sql "SELECT * FROM tarifas, hoteles, habitacion, regimen
           WHERE cod_hotel = $cod_hotel "
;
    
$sql.= "AND cod_habitacion = id_habitacion";
    
$sql.= "AND cod_regimen = id_regimen";
    
$sql.= "ORDER BY desc_habitacion"
  #7 (permalink)  
Antiguo 23/04/2007, 07:09
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 19 años, 4 meses
Puntos: 6
Re: Error En La Consulta

Debes mostrar cual es el error que aparece jimadri. si no hay error, es posible que no tengas lo datos suficientes como para que te devuelva algun resultado. Recuerda que asi como tenes la consulta, debe existir si o si un id_habitacion igual a un cod habitacion y un id_regimen para un cod_regimen.

Saludos
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #8 (permalink)  
Antiguo 23/04/2007, 07:51
Avatar de demiurgo_daemon  
Fecha de Ingreso: diciembre-2006
Ubicación: Querétaro
Mensajes: 184
Antigüedad: 17 años, 11 meses
Puntos: 2
Re: Error En La Consulta

revisa los espacios entre palabras:

Código PHP:
$sql "SELECT * FROM tarifas, hoteles, habitacion, regimen WHERE cod_hotel = $cod_hotel ";
$sql.= "AND cod_habitacion = id_habitacion ";
$sql.= "AND cod_regimen = id_regimen ";
$sql.= "ORDER BY desc_habitacion";

echo 
$sql
saludos
  #9 (permalink)  
Antiguo 23/04/2007, 08:36
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Error En La Consulta

Voy a probarlo hoy a la tarde. Y cualquier cosa posteo el error.
Creo no encontrar la diferencia entre lo mio y lo tuyo.
  #10 (permalink)  
Antiguo 23/04/2007, 10:03
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 19 años, 5 meses
Puntos: 88
Re: Error En La Consulta

no creo que te de error, y en cuanto a la diferencia son los espacios al final de la segunda y tercera linea, fijate bien
Cita:
Iniciado por jimadri Ver Mensaje
Código PHP:
$sql "SELECT * FROM tarifas, hoteles, habitacion, regimen WHERE cod_hotel = $cod_hotel ";
$sql.= "AND cod_habitacion = id_habitacion";//<---sin espacio al final
$sql.= "AND cod_regimen = id_regimen";//<---aquí tambien
$sql.= "ORDER BY desc_habitacion"
Cita:
Iniciado por demiurgo_daemon Ver Mensaje
Código PHP:
$sql "SELECT * FROM tarifas, hoteles, habitacion, regimen WHERE cod_hotel = $cod_hotel ";
$sql.= "AND cod_habitacion = id_habitacion ";//<--- con espacio al final
$sql.= "AND cod_regimen = id_regimen ";//<--- igual aqui hay espacio
$sql.= "ORDER BY desc_habitacion"
a jimadri, si imprimes tu concatenacion te arroja este resultado
Código HTML:
"SELECT * FROM tarifas, hoteles, habitacion, regimen WHERE cod_hotel = $cod_hotel AND cod_habitacion = id_habitacionAND cod_regimen = id_regimenORDER BY desc_habitacion"
fijate en id_habitacionAND y id_regimenORDER, estan unidos por lo tanto mysql detecta eso como error de sintaxys, encambio, el que te propone demiurgo_daemon seria así
Código HTML:
"SELECT * FROM tarifas, hoteles, habitacion, regimen WHERE cod_hotel = $cod_hotel AND cod_habitacion = id_habitacion AND cod_regimen = id_regimen ORDER BY desc_habitacion"
creo que con esto ya notarás la diferencia, hay que tener mucho cuidado con las concatenaciones para evitar este tipo de problemas que muchas de las veces son la que mas dolor de cabeza dan .

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #11 (permalink)  
Antiguo 23/04/2007, 12:13
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Error En La Consulta

Lamento decirle que tampoco fue la solucion a mi problema la consulta realizada por ustedes.

Mi db esta compuesta asi:

CREATE TABLE `categoria` (
`id_cat` int(2) NOT NULL,
`desc_cat` varchar(80) default NULL,
PRIMARY KEY (`id_cat`)
) TYPE=MyISAM;

CREATE TABLE `ciudad` (
`id_ciudad` int(10) NOT NULL,
`desc_ciudad` varchar(80) default NULL,
PRIMARY KEY (`id_ciudad`)
) TYPE=MyISAM;

CREATE TABLE `habitacion` (
`id_habitacion` int(2) NOT NULL,
`desc_habitacion` varchar(80) default NULL,
PRIMARY KEY (`id_habitacion`)
) TYPE=MyISAM;

CREATE TABLE `hoteles` (
`id_hotel` int(6) NOT NULL,
`nombre` varchar(80) NOT NULL default '',
`cod_categoria` int(2) NOT NULL default '0',
`cod_ciudad` int(5) NOT NULL default '0',
`observaciones` text,
`logo` varchar(80) NOT NULL default '',
`estrellas` varchar(80) default NULL,
PRIMARY KEY (`id_hotel`),
KEY `cod_cat` (`cod_categoria`),
KEY `cod_ciu` (`cod_ciudad`)
) TYPE=MyISAM;

CREATE TABLE `regimen` (
`id_regimen` int(10) NOT NULL,
`desc_regimen` varchar(80) default NULL,
PRIMARY KEY (`id_regimen`)
) TYPE=MyISAM;

CREATE TABLE `tarifas` (
`id_tarifas` int(6) NOT NULL,
`cod_hotel` int(80) NOT NULL,
`cod_habitacion` int(80) NOT NULL,
`single` int(3) default NULL,
`doble` int(3) default NULL,
`triple` int(3) default NULL,
`cuadruple` int(10) default NULL,
`family_plan` text,
`validez` varchar(80) default NULL,
`observaciones` text,
`cod_regimen` varchar(40) default NULL,
PRIMARY KEY (`id_tarifas`)
) TYPE=MyISAM;

Espero con esto ayudarlos a ayudarme.
  #12 (permalink)  
Antiguo 23/04/2007, 13:12
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Error En La Consulta

Tuve que dejar de mencionar la tabla hoteles y me funcionó. Ahora el tema es generar otra consulta select * from hoteles where id_hotel = $cod_hotel y listo pero creo que esta no es la manera pero sirve igual.
  #13 (permalink)  
Antiguo 23/04/2007, 13:48
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 19 años, 4 meses
Puntos: 6
Re: Error En La Consulta

si la consulta esta bien, el problema es que no hay datos suficientes en tus tablas, te lo comente en mi mensaje anterior. Si deseas evitar esta 'dependencia' entre tablas, deberas utilizar LEFT JOOIN o RIGHT JOIN(el que corresponda) para unir tus tablas.

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #14 (permalink)  
Antiguo 23/04/2007, 15:46
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 19 años, 5 meses
Puntos: 88
Re: Error En La Consulta

tambien puedes usar el INNER JOIN, eso dependerá de tus necesidades.

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #15 (permalink)  
Antiguo 23/04/2007, 17:24
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 19 años, 4 meses
Puntos: 6
Re: Error En La Consulta

Cita:
Iniciado por eits Ver Mensaje
tambien puedes usar el INNER JOIN, eso dependerá de tus necesidades.

saludos.
Para este caso, si el problema es el que nombro, tampoco le sirve INNER JOIN. Y agrego un enlace, para ser mas claro. Ahi está bien explicado las diferencias entre INNER JOIN, LEFT JOIN y RIGHT JOIN.

Cita:
El LEFT JOIN y RIGHT JOIN son otro tipo de composición de tablas, también denominada composición externa. Son una extensión del INNER JOIN.

Las composiciones vistas hasta ahora (el producto cartesiano y el INNER JOIN) son composiciones internas ya que todos los valores de las filas del resultado son valores que están en las tablas que se combinan.

Con una composición interna sólo se obtienen las filas que tienen al menos una fila de la otra tabla que cumpla la condición, veamos un ejemplo:

Queremos combinar los empleados con las oficinas para saber la ciudad de la oficina donde trabaja cada empleado, si utilizamos un producto cartesiano tenemos:

SELECT empleados.*,ciudad
FROM empleados, oficinas
WHERE empleados.oficina = oficinas.oficina

Observar que hemos cualificado el nombre de columna oficina ya que ese nombre aparece en las dos tablas de la FROM.

Con esta sentencia los empleados que no tienen una oficina asignada (un valor nulo en el campo oficina de la tabla empleados) no aparecen en el resultado ya que la condición empleados.oficina = oficinas.oficina será siempre nula para esos empleados.

Si utilizamos el INNER JOIN:

SELECT empleados.*, ciudad
FROM empleados INNER JOIN oficinas ON empleados.oficina = oficinas.oficina

Nos pasa lo mismo, el empleado 110 tiene un valor nulo en el campo oficina y no aparecerá en el resultado.

Pues en los casos en que queremos que también aparezcan las filas que no tienen una fila coincidente en la otra tabla, utilizaremos el LEFT o RIGHT JOIN.
Un saludo, espero que les sirva.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #16 (permalink)  
Antiguo 23/04/2007, 17:29
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 19 años, 5 meses
Puntos: 88
Re: Error En La Consulta

Cita:
Iniciado por Fridureiks Ver Mensaje
Para este caso, si el problema es el que nombro, tampoco le sirve INNER JOIN. Y agrego un enlace, para ser mas claro. Ahi está bien explicado las diferencias entre INNER JOIN, LEFT JOIN y RIGHT JOIN.

Un saludo, espero que les sirva.
si tienes razón, me deje llevar por mis impulsos , se cual es la diferencia entre los 3 tres, es solo que, me gano la emocion de ayudar y de postear , para la proxima tendré mas cuidado.

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #17 (permalink)  
Antiguo 23/04/2007, 17:47
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 19 años, 4 meses
Puntos: 6
Re: Error En La Consulta

Cita:
Iniciado por eits Ver Mensaje
si tienes razón, me deje llevar por mis impulsos , se cual es la diferencia entre los 3 tres, es solo que, me gano la emocion de ayudar y de postear , para la proxima tendré mas cuidado.

saludos.
Yo lo aprendi hace no mucho XD e insisto tanto para que no se me olvide XD

Saludos
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #18 (permalink)  
Antiguo 26/04/2007, 09:31
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Error En La Consulta

Pregunta: que las tablas de mi db sean del tipo "INNODB" hace que sea mas facil para el programa realizar este tipo de uniones, ya que declaro las claves foraneas luego de creear todas las tablas??????
  #19 (permalink)  
Antiguo 26/04/2007, 09:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: Error En La Consulta

No necesariamente, InnoDB es un formato muy flexible, pero el impacto en cuanto a rendimiento no es tan notorio dependiendo del destino de la tabla.
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 22:34.