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

como puedo ordenar segun el dato de otra fila?

Estas en el tema de como puedo ordenar segun el dato de otra fila? en el foro de Bases de Datos General en Foros del Web. mi caso es el siguiente. Quiero hacer un top 10 y ordenar del 1 al 10,hasta aqui todo bien,la cosa se complica cuando resulta que ...
  #1 (permalink)  
Antiguo 28/07/2004, 12:56
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
como puedo ordenar segun el dato de otra fila?

mi caso es el siguiente.

Quiero hacer un top 10

y ordenar del 1 al 10,hasta aqui todo bien,la cosa se complica cuando resulta que los datos de la votacion estan en otra tabla distinta a la que contiene el poduco:( si pogo esto:

$query = "select producto.producto_id,producto,name,votos.datos FROM productos,datos etc....... no se como puedo ponerle esto :(:

$sql="SELECT AVG(puntuacion) AS media FROM puntuacion_productos WHERE producto_id=''";


es dificil no?es que estoy desesperaaaado :(

gracias
  #2 (permalink)  
Antiguo 28/07/2004, 14:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Newphp .. vas a tener que cambiarte el nick a NewSQL xDD ..

Las preguntas de SQL please, al foro de Base de datos donde procedo a mover tu mensaje.

Un saludo,
  #3 (permalink)  
Antiguo 28/07/2004, 15:06
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
perdon cluter por equivocarme de foro ^^u la verdad es que si xDDDD me tendre que llamar newsql:$
  #4 (permalink)  
Antiguo 29/07/2004, 05:03
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
nadie sabe como???:(
  #5 (permalink)  
Antiguo 29/07/2004, 08:13
 
Fecha de Ingreso: julio-2004
Ubicación: Capital Federal, Argentina
Mensajes: 283
Antigüedad: 19 años, 9 meses
Puntos: 1
la verdad que no entendí demasiado las estructuras de las tablas

posteá las estructuras de las tablas que queres utilizar
y qué campos querés mostrar

la solución viene por el lado de hacer un TOP 10 de la tabla que tenes los datos de la votación, y hacer un INNER JOIN (no el FROM tradicional, sino el INNER JOIN)

mandá estructura de tablas, campos a mostrar y algo importante: en que motor es ? Access, SqlServer, MySql ?
  #6 (permalink)  
Antiguo 29/07/2004, 11:55
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
uso MYSQL,la estructura seria algo asi(es que no tengo a mano el codigo exacto de las tablas :$)

tabla productos:
Producto_id
name
datos

tabla puntuacion productos:
id_producto
votos producto


el id:producto y producto id son el mismo en todos los casos:D gracias
  #7 (permalink)  
Antiguo 29/07/2004, 12:23
 
Fecha de Ingreso: julio-2004
Ubicación: Capital Federal, Argentina
Mensajes: 283
Antigüedad: 19 años, 9 meses
Puntos: 1
La idea seria algo asi como esto
De inicio te digo que yo programo en SqlServer, pero supongo que MySql debe ser similar

Fijate si te funciona esto

SELECT *
FROM productos,
(
SELECT TOP 10 id_producto, AVG(votos producto) as orden
FROM puntuacion_productos
ORDER BY orden
)
WHERE id_producto = producto_id
ORDER BY orden
  #8 (permalink)  
Antiguo 29/07/2004, 13:21
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
ok,gracias :D probare haber que tal :D
  #9 (permalink)  
Antiguo 29/07/2004, 13:52
 
Fecha de Ingreso: julio-2004
Ubicación: Capital Federal, Argentina
Mensajes: 283
Antigüedad: 19 años, 9 meses
Puntos: 1
Cuando lo pruebes si no funciona, probate esto tambien
que es dandole un nombre al subquery (en algunas cosas si no le das un nombre no funciona)

SELECT *
FROM productos,
(
SELECT TOP 10 id_producto, AVG(votos producto) as orden
FROM puntuacion_productos
ORDER BY orden
) O
WHERE O.id_producto = producto_id
ORDER BY orden O
  #10 (permalink)  
Antiguo 29/07/2004, 13:54
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Prueba con esto, creo que te debería resultar:

select id_producto, average(votos_producto)
from productos a, puntuación productos b
where a.id_producto = producto_id
group by 1
order by 2 desc limit 10
  #11 (permalink)  
Antiguo 29/07/2004, 15:15
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
muchas gracias Vice,pero me lanza este error :(

Parse error: parse error, unexpected T_STRING on line 2

muchas gracias forvan ;) pero creo que no funciona :(
  #12 (permalink)  
Antiguo 29/07/2004, 21:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Newphp .. las consultas SQL que aquí e van a dar (y te han mostrado) debes probarlas con algún GUI para Mysql (phpMyadmin .. o el que quieras usar) .. ahí veras si los resultados que obtienes son los esperados ..

Cuando eso ya lo tengas claro (la sentencia SQL a usar) entonces .. si obtienes un error como ese (que es de PHP) .. preguntas en el foro de PHP. Pero antes prueba si la sentencia SQL que te han sugerido es lo que esperas.

Un saludo,

PD: Forvan .. lamentablemente Mysql no soporta subconsultas.
  #13 (permalink)  
Antiguo 30/07/2004, 02:45
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
ok,gracias cluster ;)
  #14 (permalink)  
Antiguo 30/07/2004, 03:14
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
bueno quizas si cambio la pregunta encontremos una solucion :D se puede ordenar una consulta por un valor pedido por una consulta que a sido ejecuta despues? no se si me explique :D ya que asi haria primero la consulta con todo lo que deseo del producto y luego mas abajo con la ID del producto hago la media y ordeno la primera consulta por la media :D

gracias ;)
  #15 (permalink)  
Antiguo 30/07/2004, 07:58
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Newphp: de entrada la respuesta es NO, sólo puedes ordenar por algo que está en la propia consulta.
Si quieres ordenar por algo que obtienes después, te tendrás que buscar un algoritmo de programación para conseguirlo. Pero realmente con lo que dices poco podemos ayudarte, pues no pones la consulta muy clara.
Una posibilidad que te podría ayudar es guardar el resultado de la primera consulta en una tabla temporal para que cuando lo necesites lo cruces con los datos por los que quieres ordenar.
Pero lo que has preguntado al principio, creo que estaba resuelto en la consulta que te puse antes.
Un saludo.
  #16 (permalink)  
Antiguo 30/07/2004, 15:28
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
ok,gracias por todo ;)
  #17 (permalink)  
Antiguo 02/08/2004, 12:33
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
he decidido volver al ataque :D

tengo esto(es casi lo mismo que psuo vice ;))

Código PHP:
<?
include("conecta.php")
$query "select id_producto,average(votos) FROM votos a, producto_id tabla_productos b where a.id_producto =producto_id"
$resp mysql_query($query); 
$datos mysql_fetch_array($resp);
?>
me da error :( este error:

Parse error: parse error, unexpected T_VARIABLE in c:\appserv\www\prueba.php on line 3

alguna idea? weno muchas gracias
  #18 (permalink)  
Antiguo 03/08/2004, 14:46
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
De entrada te diré que la select que has puesto tiene un error muy claro en el from, pues la segunda tabla tiene dos alias. Además para usar una función de agregación como el avg, necesitas poner el group by
Un saludo.
  #19 (permalink)  
Antiguo 03/08/2004, 15:05
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
toy exo un lio:$ para aclararme mejor te digo como tengo las tablas xDDD es que sino me hago la pixa un lio:$

tabla_productos:
producto id
titulo
datos


tabla_votos:
id_producto
votos
id_usuario(esto es para que lo usuarios solo voten una vez)


basicamente lo tengo asi :D es que sino me hago un lio la verdad.....lo mio con las consultas es mortal:P
  #20 (permalink)  
Antiguo 04/08/2004, 10:52
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
tengo la pixa exa un lio :(
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 20:30.