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

Unknown column 'paises' in 'where clause'

Estas en el tema de Unknown column 'paises' in 'where clause' en el foro de Bases de Datos General en Foros del Web. Hola a todos, tengo dos tablas, una de paises y otra con información que quiero mostrar de unos cursos de cada pais a través de ...
  #1 (permalink)  
Antiguo 03/05/2010, 11:53
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Unknown column 'paises' in 'where clause'

Hola a todos, tengo dos tablas, una de paises y otra con información que quiero mostrar de unos cursos de cada pais a través de un formulario.. Mi problema es que no consigo que me imprima el pais. He intentado con inner join, asociando un id_pais al mismo id_pais que hay en la tabla de cursos y nada, me sale el típico error de :
Unknown column 'paises' in 'where clause'
Adjunto el código:
$query = "select * FROM paises ,becas where paises ='% ".$paises."'%
".$searchtype." like '%".$searchterm."%'";

$result = mysql_query($query) or die(mysql_error());


$num_results = mysql_num_rows($result);

echo "<p>Numero de becas encontradas: ".$num_results."</p>";

for ($i=0; $i <$num_results; $i++) {
$row = mysql_fetch_assoc($result,$result2);
echo "<p><strong>".($i+1).". PAIS: ";
echo htmlspecialchars(stripslashes($row['paises']));
echo "</strong><br/> Nombre: ";
echo htmlspecialchars(stripslashes($row['nombre']));
echo "</strong><br />Tipo: ";
echo stripslashes($row['tipo']);
echo "<br />Descripcion: ";
echo stripslashes($row['descripcion']);
echo "<br />Requisitos: ";
echo stripslashes($row['requisitos']);
echo "<br />enlace de interés: ";
echo stripslashes($row['link']);

Si hago la consulta solo a la tabla de cursos me imprime perfectamente la info, pero la de todos los paises. Yo lo que quiero conseguir es que si pincho en el boton Francia me salga solo la info de los cursos de Francia y no del resto.
Espero que me haya explicado bien y a ver si alguien me puede ayudar
Saludos
  #2 (permalink)  
Antiguo 03/05/2010, 12:58
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: Unknown column 'paises' in 'where clause'

1) No pongas código HTML, PHP o de cualquier otro tipo en este foro. Va contra las normas del foro y resulta:
a) inútil,
b) confuso,
c) innecesario,
d) ilegible para el que no lo usa.

2) La sentencia:
Código MySQL:
Ver original
  1. SELECT  *
  2. FROM paises ,becas
  3. WHERE paises ='%valordevariable%';
requiere que en la tabla PAISES o en la tabla BECA, haya un campo denominado "paises", que no se encuentra.
__________________
¿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 03/05/2010, 12:59
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Unknown column 'paises' in 'where clause'

Saludos

El error te esta indicando que no existe la columa paises ya que no estas haciendo referencia a cual tabla pertenece.

Suponiendo que ese campo es de la tabla paises podrias ajustarlo de la siguiente manera.

Código MySQL:
Ver original
  1. select * FROM paises p ,becas b where p.paises ='pais'

Hasta Pronto
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #4 (permalink)  
Antiguo 03/05/2010, 13:30
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Creo que voy avanzando, ahora el error es el siguiente:

Column 'pais' in where clause is ambiguous
Saludos
  #5 (permalink)  
Antiguo 03/05/2010, 13:37
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: Unknown column 'paises' in 'where clause'

En las dos tablas tenes el mismo nombre de columna.
Tienes que indicar uno sólo usando el alias.

Postea la estructura de las tablas para darte una solución más eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 03/05/2010, 13:49
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Es cierto, tengo na tabla con tres columnas:
Tabla paises:

id pais id_pais


Tabla becas:

id id_pais pais nombre descripcion requisitos ...etc

Coincide la columna pais...¿cómo se usa el alias?
  #7 (permalink)  
Antiguo 03/05/2010, 13:50
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Es cierto, tengo na tabla con tres columnas:
Tabla paises:

id pais id_pais


Tabla becas:

id id_pais pais nombre descripcion requisitos ...etc


quise poner una columna id_pais en cada una para usar el inner join, pero creo que sobra

Coincide la columna pais...¿cómo se usa el alias?
  #8 (permalink)  
Antiguo 03/05/2010, 14: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: Unknown column 'paises' in 'where clause'

En realidad, una FK sólo requiere que pongas la PK de la otra tabla como tal.
En el contexto de lo que has armado en la tabla BECAS, la tabla países se vuelve superflua...
la tabla PAIS (las tablas se ponen en singular como norma), sería:
PAIS(id_pais, nombre_pais)
La tabla BECA:
BECA(id_beca, id_pai, nombre, descripcion, requisitos, ...)

Así, el INNER JOIN sería
Código MySQL:
Ver original
  1. FROM beca B INNER JOIN pais P ON B.id_pais = P.id_pais;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 03/05/2010, 14:18
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Bien, lo entiendo pero ahora no me devuelve ningún resultado, me dice que no he rellenado alguno de los campos, debo tener algún error de sintaxis:

$query = "select * FROM becas B INNER JOIN paises P ON B.id_pais = P.id_pais
where paises = '.$pais.' and becas =
".$searchtype." like '%".$searchterm."%'";

Mi intención es que de la tabla paises me recoja el pais del que quiero mostrar la info que está asociada al id pais de la tabla de becas.
  #10 (permalink)  
Antiguo 03/05/2010, 14:54
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: Unknown column 'paises' in 'where clause'

La tabla PAIS en ese contexto, lo que debe contener es un listado fijo de países. Las becas deben guardarse en la tabla BECA y sólo hacer referencia al país en donde se ubica.
En ese contexto, INNER JOIN devolverá datos si los campos de la tabla BECA están llenos en el ID del país en cuestión, y ese ID se corresponde con uno que ya haya sido ingresado en la tabla PAIS.
Si quieres saber qué registros de BECA no tienen indicado el país, debes suplantar INNER por LEFT:
Código MySQL:
Ver original
  1. FROM beca B LEFT JOIN pais P ON B.id_pais = P.id_pais
  2. WHERE B.id_pais <>'' OR B.id_pais IS NULL;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 03/05/2010, 15:31
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Todos los registros de beca tienen asociado el id-pais que se corresponde con el de la tabla paises.
Me estoy volviendo loco
  #12 (permalink)  
Antiguo 03/05/2010, 16:11
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: Unknown column 'paises' in 'where clause'

Si no te devuelve registros en el INNER JOIN es que no se está cumpliendo en ningún caso la condición de relación
Código SQL:
Ver original
  1. ON B.id_pais = P.id_pais
No hay mucho que inventar en esto.
Revisa las tablas de datos, y si le estás poniendo otra condición más, fíjate que haya registros que la cumplan o que las variables estén llegando con datos (este es el problema más habitual).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 03/05/2010, 17:03
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

reviso y reviso y no encuentro el problema
  #14 (permalink)  
Antiguo 03/05/2010, 17:08
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: Unknown column 'paises' in 'where clause'

Revisa como lista de chequeo:
1) Contenido de la tabla PAIS.
2) Contenido de la tabla BECA.
3) Prueba de sentencia con valores fijos basados en los datos de las tablas.
4) Contenido de las variables al momento de crear la sentencia.
5) Prueba de consulta con INNER JOIN.
6) Prueba de consulta con LEFT JOIN.

En algún punto hay un problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 03/05/2010, 17:09
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Puede estar el problema en el formulario?
a traves de botonos de opcion el usuario debe seleccionar el pais.
Con un select el nombre de la beca,el tipo, etc requisitos, etc
y con un campo de texto puede buscar coincidencias genericas que coincidan en la tabla de becas, por ej doctorado
En realidad estoy haciendo dos consultas
No se, me he atascado por completo
  #16 (permalink)  
Antiguo 03/05/2010, 18:00
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Consigi que me imprima la info si le paso datos concretos almacenados, si busco 'doctorado ' de la tabla de becas me imprime todos los doctorados de todos los paises. Lo que no encuentro es que si selecciono Alemania en el boton de opcion solo me imprima los doctorados de alemania
  #17 (permalink)  
Antiguo 03/05/2010, 18:12
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: Unknown column 'paises' in 'where clause'

Eso implica que la selección entonces está mal hecha.
Revisa cómo determinas el país, porque no lo está tomando bien.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 03/05/2010, 18:22
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

La clave puede estar en los echo?
for ($i=0; $i <$num_results; $i++) {
$row = mysql_fetch_assoc($result);
echo "</strong>PAIS: ".$pais."</p>";
echo "<p><strong>".($i+1).". TIPO: ";
echo stripslashes($row['tipo']);
echo "</strong><br/> Nombre: ";
echo htmlspecialchars(stripslashes($row['nombre']));
echo "<br />Descripcion: ";
echo stripslashes($row['descripcion']);
echo "<br />Requisitos: ";
echo stripslashes($row['requisitos']);
echo "<br />enlace de interés: ";
echo stripslashes($row['link']);
Podría usar un if ? si postea $pais que imprima el resto?



El codigo html con el form está bien, estoy seguro:

<form action="results.php" method="post">
<p>
<label>Alemania
<input type="radio" name="pais" id="radio" value="alemania">
</label>
</p>
<p>
<label>Francia
<input type="radio" name="pais" id="radio2" value="francia">
</label>
</p>
<p>&nbsp;</p>
<p>Busca el tipo de beca:<br />
<select name="searchtype">
<option value="nombre">Nombre
<option value="tipo">Tipo
<option value="descipcion">Descripcion
<option value="link">Enlaces de interés
</select>
<br />
Introduce un término, ej Doctorado,Investigación, Idiomas,etc:<br />
<input name="searchterm" type="text" size="40">
<br />
<input type="submit" name="buscar" value="Buscar">
</p>
</form>
Gracias, me estas resultando de mucha ayuda
  #19 (permalink)  
Antiguo 03/05/2010, 19:18
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

este es el cod php que me devuelve la info específica de la tabla beca , pero no hace caso que seleccione el pais y que solo muestre la info de ese pais:

$query = "select * FROM becas B INNER JOIN paises P ON B.id_pais = P.id_pais

where ".$searchtype." like '%".$searchterm."%'";




$result = mysql_query($query) or die(mysql_error());



$num_results = mysql_num_rows($result);

echo "<p>Numero de becas encontradas: ".$num_results."</p>";
echo "</strong>PAIS: ".$pais."</p>";
for ($i=0; $i <$num_results; $i++) {
$row = mysql_fetch_assoc($result);
echo "<p><strong>".($i+1).". TIPO: ";
echo stripslashes($row['tipo']);
echo "</strong><br/> Nombre: ";
echo htmlspecialchars(stripslashes($row['nombre']));
echo "<br />Descripcion: ";
echo stripslashes($row['descripcion']);
echo "<br />Requisitos: ";
echo stripslashes($row['requisitos']);
echo "<br />enlace de interés: ";
echo stripslashes($row['link']);

El prblema está en el $pais que llama a la tabla paises, si lo incluyo en la query no me funciona. Será un problema de sintaxis...
Me voy a dormir
  #20 (permalink)  
Antiguo 03/05/2010, 20:38
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: Unknown column 'paises' in 'where clause'

Bueno, voy a tener que hacer algunas deducciones, porque como te dije al principio de mis posts, no se debe poner código de programación en este foro. Es innecesario, confuso, irrelevante e ilegible para los que no estén habituados al lenguaje.
Bien.
El caso de la consulta lo vemos en este ejemplo:
Código MySQL:
Ver original
  1. SELECT  *
  2. FROM becas B INNER JOIN paises P ON B.id_pais = P.id_pais
  3. WHERE ".$searchtype." like '%".$searchterm."%';
Y yo creo que la clave de todos los problemas está en esta parte:
Cita:
".$searchtype." LIKE '%".$searchterm."%'
Verás: El problema para mí es establecer qué valores tienen $searchtype y $searchterm, porque hay una sola posibilidad:
Si se trata de buscar por país, por ejemplo, $searchtype debería ser el nombre del campo que guarda el nombre del país, y $searchterm el nombre del país seleccionado. En ese caso el ejemplo ya creado debería quedar, por ejemplo, así:
Código MySQL:
Ver original
  1. SELECT  *
  2. FROM becas B INNER JOIN paises P ON B.id_pais = P.id_pais
  3. WHERE P.nombre LIKE '%alemania%';
Lo mismo sería si se desea buscar por nombre de tipo de beca, o cualquiera de los campos de abas tablas. Sea cual sea el caso, el valor de $searchtype tiene forzosamente que ser un valor controlado, para que le asigne el nombre de campo conforme al tipo de selección que se realizará.

¿Se entiende la idea?

En tu script se infiere que $searchtype es un comboBox, donde los valores de las opciones no queda claro si son o no los nombres de los campos. SI no lo son, si no son exactamente los nombres de los campos, incluyendo el alias, no dará resultado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 04/05/2010, 03:36
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

En mi script $searchtype no es un combobox, es un menú select que busca coincidencias en la tabla becas, nombre, tipo, requisitos, descripción, etc y $searchterm es un campo de texto donde el usuario puede buscar introduciendo palabras y datos coincidentes en la tabla de becas, Estas dos variables solamente buscan en la tabla de becas, y funciona correctamente. El problema es
la variable $paises- este es un combobox-, que no se como relacionarlo en la query. Con inner join relaciono las dos tablas, hasta ahi perfecto, pero como le digo que si consulta $paises me imprima solamente la info del pais que el usuario pinche.

Disculpas por lo del script, no se que usar para ponerlo legible, tal podía decírmelo. Soy novato.
Un saludo
  #22 (permalink)  
Antiguo 04/05/2010, 03:38
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Lo he intentado de esta manera:

"select * FROM becas B INNER JOIN paises P ON B.id_pais = P.id_pais

where ".$paises." and ".$searchtype." like '%".$searchterm."%'";


pero me tira error de sintaxis
  #23 (permalink)  
Antiguo 04/05/2010, 04:05
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: Unknown column 'paises' in 'where clause'

Cita:
pero me tira error de sintaxis
No estás revisando la sentencia antes de ejecutarla, como te dije, ni tampoco la estás probando directamente con esos valores.
Si no lo haces metódicamente no podrás descartar errores.
Cita:
. El problema es
la variable $paises- este es un combobox-, que no se como relacionarlo en la query.
De la misma forma que lo haces con las otras dos: El valor de comparación debe ser un campo de la tabla. Siempre. Pero ten en cuenta que las variables que contengan texto deben quedar en la sentencia encerradas entre apóstrofos:

Código MySQL:
Ver original
  1. FROM becas B INNER JOIN paises P ON B.id_pais = P.id_pais
  2. WHERE P.nombre_pais = '".$paises."' and ".$searchtype." like '%".$searchterm."%';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 04/05/2010, 05:21
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

Tío, 1000 gracias por tu paciencia conmigo, ya está casi solucionado, no me tira error ninguno, no encuentra las becas pero daré con rl problema. Estará en el diseño de las tablas o en los echo.
  #25 (permalink)  
Antiguo 04/05/2010, 09:34
Avatar de Pike  
Fecha de Ingreso: agosto-2008
Ubicación: Por ahí
Mensajes: 251
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Unknown column 'paises' in 'where clause'

¡¡¡¡gnzsoloyo !!!!

ya está solucionado, te vuelvo a dar mil gracias por tu ayuda y tu paciencia.

Una cosa mas aprendida
  #26 (permalink)  
Antiguo 04/05/2010, 10:08
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: Unknown column 'paises' in 'where clause'

__________________
¿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: column, unknown
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 03:00.