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

No consigo crear la select correcta

Estas en el tema de No consigo crear la select correcta en el foro de Bases de Datos General en Foros del Web. Hola, para empezar, decir que di Oracle, pero ahora creo que ando perdidisima, me gustaría que me asesorarais al hacer una select en mi BD ...
  #1 (permalink)  
Antiguo 26/04/2007, 08:58
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 17 años, 8 meses
Puntos: 0
No consigo crear la select correcta

Hola, para empezar, decir que di Oracle, pero ahora creo que ando perdidisima, me gustaría que me asesorarais al hacer una select en mi BD

La BD es Access y la ejecuto en ASP mediante SQL, pero la pregunta es general... Os dejo una imágen de mis tablas.

http://img231.imageshack.us/img231/7523/tablassd7.jpg

Bien, intentaré explicarme como mejor pueda, pero es bastante lioso..

En mi BD hay varias tablas, cada una trata un tema: comics,conciertos etc
Pero habrá una tabla en la que el webmaster meterá las noticias que quiere destacar, esta tabla es destacados y sus campos son:
id_destacado: es la identificación en esa tabla, cada articulo destacado tiene su identificación
destacados_tipo: se refiere al número al que está relacionada la tabla.
destacados_noticia: se refiere a id_x de la tabla que sea
destacados_destacado: de momento es un campo que tiene por defecto "Si"

Después está la tabla tipos sus campos son:
id_tipo: esta relacionado con la tabla destacados
tipo_nombre: muestra el nombre de cada tabla relacionado con un número

De manera que por ejemplo podamos tener

Tabla destacados
id_destacado: 1
destacados_tipo: 2 (Sería de tipo discos)
destacados_noticia: 4 (La noticia 4 de la tabla discos)
destacados_destacado: Si

Tabla tipos
id_tipo: 2
nombre_tipo: discos

Espero que se haya entendido medianamente...

Yo,lo que pretendo hacer es un listado, de por ejemplo los últimos 4 articulos destacados y quiero su título y su imágen para ello he hecho este código:

Recojo todo lo que hay en la tabla destacados en orden descendente
Código:
sentencia="Select * from destacados order by id_destacado desc";
Pongo un contador a 0
Código:
contador=0;
while (!rstIntranet.eof & contador<=4){
		%>
			<% 
   varmax="Select max(id_destacado)-contador from destacados"; // Como quiero coger los 4 últimos registros, cojo el máximo-contador (que en este momento es 0) y después aumenta
    vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)"; // Aquí quiero tener el string que me indique a qué tabla debo atacar ayudada de destacados_noticia.	 

			
	Select Case vartabla // Si la tabla es "comics" que se muestre hola
	  case "comics":
		Response.Write("hola")
	  case else:
		Response.Write("adios")				
	End Select	
			

	<%rstIntranet.Movenext();
	contador=contador + 1; // Incrementamos el contador para ir restandoselo al max de id. 4-0,4-1,4-2,4-3,4-4;
	}
	%>
Me gustaría saber si estoy en lo correcto, ya que me dá fallo primero aquí:
Código:
 varmax="Select max(id_destacado)-contador from destacados";
Que creo que es la resta esa del contador, ya que si la quito me dá otro error

Y después aquí:
Código:
vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)";
Que me dice que pocos parametros.

Ejecuto las selects con SQL por si sirve de algo de esta manera:
intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
intra3.Open(vartabla,cone,adOpenStatic,adCmdTable) ;

Espero que me podais ayudar de alguna manera, porque se me está haciendo imposible, sé que hay una manera de hacer consultas, con Access pero no sé usarlo, lo siento por un post tan largo, pero prefería explicar bien lo que me pasaba.
  #2 (permalink)  
Antiguo 27/04/2007, 03:51
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: No consigo crear la select correcta

Cambios, poniendo este código el error es distinto, será de sintaxis? será que no consigo sacar el dato que quiero? x_X

Código:
intra2=new ActiveXObject("ADODB.RecordSet");
intra3=new ActiveXObject("ADODB.RecordSet");
varmax="Select max(id_destacado) from destacados";
intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado='"+ varmax +"')";
intra3.Open(vartabla,cone,adOpenStatic,adCmdTable);
El resto va igual que anteriormente.

Error: Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][Controlador ODBC Microsoft Access] No coinciden los tipos de datos en la expresión de criterios.
/portal_joven/listado_destacados.asp, línea 41


Línea 41: intra3.Open(vartabla,cone,adOpenStatic,adCmdTable) ;
  #3 (permalink)  
Antiguo 27/04/2007, 08:28
Avatar de goteen_mx  
Fecha de Ingreso: abril-2005
Ubicación: D.F.
Mensajes: 403
Antigüedad: 19 años, 7 meses
Puntos: 37
Re: No consigo crear la select correcta

creo que tu variable varmax no esta correcta

varmax="Select max(id_destacado) from destacados";

y ejecutas la consulta

luego tienes

vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado='"+ varmax +"')";

donde id_destacado es de tipo entero y var_max es cadena y ademas no tiene sentido compararla con una sentencia sql, lo que tienes que hacer es igualar tu valor de var_max a una variable y compararla a menos que quieras anidar otra consulta.

como que esta mejor esta

select top 1 tipo_nombre from tipos inner join destacados on id_tipo=destacados_tipo order by destacados_id desc

creo que hace lo mismo que quieres haer pero en una sola consulta

bye
saludos
  #4 (permalink)  
Antiguo 30/04/2007, 01:09
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: No consigo crear la select correcta

No entiendo muy bien lo que me has intentado explicar, pero poniendo esto:

Código:
intra2=new ActiveXObject("ADODB.RecordSet");
varmax="select top 1 tipo_nombre from tipos inner join destacados on id_tipo=destacados_tipo order by destacados_id desc"
 intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
Me dá este error:

Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Controlador ODBC Microsoft Access] La expresión de combinación no está admitida.
/portal_joven/listado_destacados.asp, línea 42


Línea 42: intra2.Open(varmax,cone,adOpenStatic,adCmdTable);

No se puede ejecutar supongo...


Edito:

He puesto este código y he omitido la segunda sentencia
Código:

if(isNaN(varmax)){
Response.Write("No es numero")
}else{
Response.Write("Numero")
}

Resulta que no es número, si alguien tiene idea de cómo lo podria hacer... ? (la solución de arriba tampoco me sirvió)
Y creo que tampoco la segunda variable esta bien, pero de momento me interesa lo del número...

Última edición por Shilfild; 30/04/2007 a las 02:29
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 23:16.