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

distinct + top + newid() dolor de cabeza :S

Estas en el tema de distinct + top + newid() dolor de cabeza :S en el foro de Bases de Datos General en Foros del Web. Hola, deseo que me ayuden en esta funcion para mssql Código PHP: select top 5 id , yy , xx from table where id <> 0 order by NEWID ()  ahora el problema es q ...
  #1 (permalink)  
Antiguo 03/12/2010, 11:43
Avatar de sandrox23  
Fecha de Ingreso: abril-2005
Ubicación: Lima - Peru
Mensajes: 274
Antigüedad: 19 años, 7 meses
Puntos: 0
Exclamación distinct + top + newid() dolor de cabeza :S

Hola, deseo que me ayuden en esta funcion para mssql

Código PHP:
select top 5 id,yy,xx from table where id<>0 order by NEWID() 
ahora el problema es q en mi tabla los valores del id en algunos casos son los mismos por eso quiero introducirle un "DISTINCT", osea asi:
Código PHP:
select DISTINCT top 5 id,yy,xx from table where id<>0 order by NEWID() 
el problema es que haciendo eso no funciona ...

la funcion es generar una cantidad de 5 usuarios con distinto id y que sea randomico.

espero su ayuda .. Gracias
__________________
diseniando ........
  #2 (permalink)  
Antiguo 03/12/2010, 11:55
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
Tema movido desde PHP a Bases de Datos
  #3 (permalink)  
Antiguo 03/12/2010, 12:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: distinct + top + newid() dolor de cabeza :S

Prueba asi :)
Código SQL:
Ver original
  1. SELECT top 5 id,yy,xx FROM TABLE WHERE id<>0 GROUP BY id,yy,xx ORDER BY NEWID()

Saludos!
  #4 (permalink)  
Antiguo 03/12/2010, 13:02
Avatar de sandrox23  
Fecha de Ingreso: abril-2005
Ubicación: Lima - Peru
Mensajes: 274
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: distinct + top + newid() dolor de cabeza :S

Hola Libras, lo probe asi pero aun asi se repite los id ..

gracias

ojala que alguien tenga una solucion :(
__________________
diseniando ........
  #5 (permalink)  
Antiguo 03/12/2010, 16:02
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: distinct + top + newid() dolor de cabeza :S

Hola Sandrox23, creo que el problema está entonces con los datos, deberías poner algunos cuantos de ejemplo, para ver cómo los tienes organizados y poder darte alguna solución

Saludos
Leo.
  #6 (permalink)  
Antiguo 03/12/2010, 17:42
Avatar de sandrox23  
Fecha de Ingreso: abril-2005
Ubicación: Lima - Peru
Mensajes: 274
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: distinct + top + newid() dolor de cabeza :S

ok ..

aqui dejo unos datos de ejemplo

id - Name

1234445556 - jorgito
2343545456 - luquitas
2334455568 - popito
1234445556 - colitox
2334455568 - mirtax
.
.
.

Código PHP:
SELECT top 5 id,Name FROM TABLE WHERE id<>0 GROUP BY id,Name ORDER BY NEWID() 
y bueno en el resultado el id en algunos casos se repite ...

Código PHP:

$aaa 
$db_primary->execute("SELECT top 5 id FROM TABLE WHERE id<>0 GROUP BY id ORDER BY NEWID()"); 
aqui no se repite y esta perfecto, el problema es que necesito seleccionar el Name por obligacion ... ya que luego hago otra consulta asi:

$aaa->fields[1] = Name .......

saludos
__________________
diseniando ........
  #7 (permalink)  
Antiguo 06/12/2010, 09:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: distinct + top + newid() dolor de cabeza :S

1234445556 - jorgito
2343545456 - luquitas
2334455568 - popito
1234445556 - colitox
2334455568 - mirtax

Quieres que estos 2 aparezcan como un solo campo y que nada mas aparezca un id? si quieres esto con un group by no lo vas a poder hacer porque son 2 campos diferentes(por la agrupacion) podrias sacarlo de otra manera poniendo el id y el nombre separado por comas(para el caso de que los nombres sean diferentes)

Saludos!
  #8 (permalink)  
Antiguo 06/12/2010, 11:00
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: distinct + top + newid() dolor de cabeza :S

Buenos días sandrox23, cuando un id es asignado a más de una persona me supongo que no te importa cuál nombre se muestre, lo único que quieres es que no se repita el id correcto??? creo que lo puedes hacer así:

En primer lugar obtendrías 5 id's distintos de tu tabla, esto lo puedes hacer así

Código SQL:
Ver original
  1. SELECT top 5 DISTINCT id FROM TuTabla WHERE id <> 0

Ahora, con esto lo que deberías es asignarle el nombre para cada id, el problema es que al tener una relación uno a muchos si lo haces con un INNER JOIN se duplicaría el registro. Sin embargo lo puedes hacer con una subconsulta, trayendo solo el TOP 1

Código SQL:
Ver original
  1. SELECT top 1 R2.nombre FROM TuTabla R2
  2. WHERE R2.id = 1234445556
  3. ORDER BY newid()

Esta consulta te traería aleatoriamente los nombres de jorgito o colitox, que son los que tienen asignadas el id 1234445556. Ahora, si unes las dos ideas que te acabo de dar puedes generar una consulta así:

Código SQL:
Ver original
  1. SELECT id, (
  2. SELECT top 1 R2.nombre FROM TuTabla R2
  3. WHERE R2.id = R1.id ORDER BY newid()
  4. ) AS nombre
  5. FROM (SELECT Top 5 DISTINCT id FROM TuTabla) R1
  6. ORDER BY newid()

Analízala un poco para ver si es lo que quieres, y si continuas con problemas lo comentas en el foro.

Saludos
Leo.

Etiquetas: distinct, newid(), php
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 16:50.