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

where art.idArticulo=vot.idArticulo cuando vot.idArticulo no siempre existe

Estas en el tema de where art.idArticulo=vot.idArticulo cuando vot.idArticulo no siempre existe en el foro de Bases de Datos General en Foros del Web. Buenas Tengo una serie de artículos con sus respectivas votaciones. El problema es que me gustaría hacer una consulta donde uniera varias tablas para poder ...
  #1 (permalink)  
Antiguo 01/05/2008, 06:22
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
De acuerdo where art.idArticulo=vot.idArticulo cuando vot.idArticulo no siempre existe

Buenas

Tengo una serie de artículos con sus respectivas votaciones.
El problema es que me gustaría hacer una consulta donde uniera varias tablas para poder trabajar con las votaciones y con los articulos en si.

Cada artículo tiene varias tablas, una con sus datos, otra con sus votaciones...etc, unidas siempre por el id del artículo.
Lo que pasa es que la tabla de las votaciones no tiene todos los id de los artículos, pues unicamente se añade una fila cuando un artículo ha sido votado, es decir, que si no ha sido votado no tiene ninguna fila con el id de ese artículo sin votar, de modo que no podría hacer un
where articulo.idArticulo=votaciones.idArticulo

Yo uso la siguiente consulta para ordenar los artículos por sus votaciones:
Código:
		$linkSql="select articulo.idArticulo as id_art, title
				from articulo, votaciones
				where articulo.idArticulo = votaciones.idArticulo
				order by votaciones.puntuacion desc";
Bueno, por poder puedo, pero por ejemplo, para ordenar los artículos por votaciones, no se me imprimirían por pantalla los artículos que aún no han sido votados.

No se si me he explicado bien, si necesitais más datos no dudeis en pedirlos, gracias.
  #2 (permalink)  
Antiguo 01/05/2008, 08:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: con LEFT JOIN... ON

Prueba esta consulta, que, según creo, te mostrará todos los artículos hayan sido votados o no. Ah, y para evitar que te muestre NULL, pon IFNULL al campo que te devuelve la puntuación.

SELECT articulo.idArticulo AS id_art, articulo.title, IFNULL(votaciones.puntuación, '0') as puntuacion from articulo LEFT JOIN votaciones ON articulo.idArticulo =votaciones.idArticulo order by votaciones.puntuacion DESC

Última edición por jurena; 01/05/2008 a las 08:22
  #3 (permalink)  
Antiguo 01/05/2008, 10:19
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
De acuerdo Re: where art.idArticulo=vot.idArticulo cuando vot.idArticulo no siempre existe

Muchísimas gracias jurena ! ;)

Nunca había utilizado esa sintaxis, gracias ;)
  #4 (permalink)  
Antiguo 01/05/2008, 14:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: where art.idArticulo=vot.idArticulo cuando vot.idArticulo no siempre existe

Esto era fácil.
No obstante, creo que deberías cambiar el order by para que te cogiera el 0, aunque no lo he probado. De esta forma ordena por el alias punt que encierra el valor 0 cuando no existe correspondencia.

SELECT articulo.idArticulo AS id_art, articulo.title, IFNULL(votaciones.puntuación, '0') as punt from articulo LEFT JOIN votaciones ON articulo.idArticulo =votaciones.idArticulo order by punt DESC
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:39.