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

SELECT campos iguales pero desconocidos

Estas en el tema de SELECT campos iguales pero desconocidos en el foro de Mysql en Foros del Web. Hola amigos quiero hacer un select a una BD pero el problema es que no se el valor de los campos veamos un ejemplo. rel_id ...
  #1 (permalink)  
Antiguo 30/04/2011, 09:36
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
SELECT campos iguales pero desconocidos

Hola amigos quiero hacer un select a una BD pero el problema es que no se el valor de los campos veamos un ejemplo.

rel_id | server | link | peso | formato

1 megaupload http://www.megaupload.com/?d=VGXPITJ5 49.36 MP4
1 megaupload http://www.megaupload.com/?d=VGXPITJ5 67 AVI
1 fileserve http://fileserve.com/?d=rets_sip.html 49.36 MP4
1 mediafire http://mediafire.com/skdjlW256rty 49.36 MP4

quiero seleccionar todos los que tengan rel_id = 1 en este caso todos pero que además a todos los que tienen peso y formato igual los agrupe ¿se podrá?

algo asi

megaupload fileserve mediafire [49.36/MP4] y abajo
megaupload [67/AVI]
  #2 (permalink)  
Antiguo 30/04/2011, 10:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SELECT campos iguales pero desconocidos

Usa la función GROUP_CONCAT() sobre esa columna (ver manual de referencia: MySQL :: 12 Funciones y operadores)
__________________
¿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 30/04/2011, 10:15
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: SELECT campos iguales pero desconocidos

tu siempre ayudando gnzsoloyo :D gracias, leeré esa función
  #4 (permalink)  
Antiguo 30/04/2011, 10:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SELECT campos iguales pero desconocidos

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/04/2011, 13:33
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: SELECT campos iguales pero desconocidos

me ha surgido un problema, :/ tengo esto:

Código MySQL:
Ver original
  1. SELECT *, GROUP_CONCAT(link SEPARATOR " "), GROUP_CONCAT(servidor SEPARATOR " ") FROM links_d GROUP BY peso, formato LIMIT 0 , 30

el resultado de esto es:

megaupload fileserve mediafire
http://www.megaupload.com/?d=VGXPITJ5 http://fileserve.com/?d=rets_sip.html http://mediafire.com/skdjlW256rty

megaupload link
fileserve link
mediafire link
megaupload http://www.megaupload.com/?d=VGXPITJ5

lo hace bien, pero como podria hacer obtener el servidor y seguido de este el link?

maldita sea :(
  #6 (permalink)  
Antiguo 30/04/2011, 14:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SELECT campos iguales pero desconocidos


Bueno, el tema parece ser un poquito más complejo, y en todo caso hay que trabajar un poco en el lenguaje de programación y otro poco en la base de datos.
Por lo que entiendo, lo que quieres es que la tabla devuelta por la consulta te de en una columna, el host usado, y otra columna el link completo. ¿Es correcto?
El problema es que ni MySQL ni en SQL estándar no existe una función tal que te pueda reconocer una dirección de un website en una cadena, es decir, no puedes extraer la cadena "http://www.megaupload.com" de la cadena "http://www.megaupload.com/?d=VGXPITJ5". Al menos no puedes hacerlo en la base, porque hay demasiadas variaciones que debe detectar en diferentes direcciones.
Para que se entienda: Puedes intentar encontrar la secuencia ".com" y separar el segmento siguiente de la cadena, porque supondrías que eso es el segmento del link a a imagen, y el anterior es el host. Pero estarías equivocado. Eso sería si todos los hosts estuviesen en EE.UU... Con ello no encontrarías ningún host ".com.uk", ".com.es", ".com.dn", ".com.it", ".com.ar", ".com.br", ".com.co"... y un enorme etcétera.
O sea, como método, esa forma no sirve.
Pero tienes suerte: Los lenguajes de programación si tienen funciones específicas para reconocer los hosts en una cadena. Simplemente tienes que buscarlas en el manual de referencia de tu lenguaje (yo sólo te puedo decir cuál es en .Net, y mas o menos en PHP).
Con esa función, en tu aplicación lo que debes hacer es separar ambas cosas y guardarlas en columnas separadas. Luego, en la consulta, usas simplemente la columna del host y en la otra haces un
Código SQL:
Ver original
  1. SELECT host, CONCAT(host, link) link
  2. FROM direcciones
donde en host se guarda la direccion del site (por ejemplo "http://www.megaupload.com") y en link la cadena de petición ("/?d=VGXPITJ5"), y listo, CONCAT() se encarga de juntarlas en la consulta...
Como puedes ver la cosa no es difícil, pero requiere un poco de trabajo.
Yo te había sugerido GROUP_CONCAT() porque por tu post parecía que querías que se agruparan en un mismo registro todas las direcciones iguales del mismo host, pero esa no es la idea, por lo que pones en el último post.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 30/04/2011, 15:36
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: SELECT campos iguales pero desconocidos

Pues de hecho me entendiste muy bien, si te fijas en mi base de datos verás la columna "servidor" y la columna "link", group concat la uso para agrupar aquellos links que tengan el mismo formato y el mismo peso, lo que indicaría que son los mismos links en diferentes servers,

con group concat me devuelve la lista de links muy bien del mismo peso y formato

y tambien me devuelve muy bien los servers a los que pertenecen pero lo hace asi

server1->server2->server3 y despues
link1->link2->link3 eso con la consulta posteada


pero mi problema es que quiero que sea así

server1->link1, server2->link2, server3->link3

como alternados pero al mismo tiempo agrupados :/, al ser alternados puedo hacer un arreglo en html

Código HTML:
Ver original
  1. <a href="link1">server1</a>

meterlos en un ciclo y recorrerlos muy facilmente

he estado trasteando pero no lo logro, cualquier sugerencia es bienvenida y disculpa las molestias.
  #8 (permalink)  
Antiguo 30/04/2011, 15:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SELECT campos iguales pero desconocidos

Prueba jugar entre GROUP_CONCAT() y CONCAT():
Código MySQL:
Ver original
  1. SELECT GROUP_CONCAT(CONCAT(servidor, link) SEPARATOR ' ')  links
  2. FROM links_d
  3. GROUP BY peso, formato
  4. LIMIT 0 , 30;
__________________
¿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 30/04/2011, 16:05
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: SELECT campos iguales pero desconocidos

muchisimas gracias gnzsoloyo, estudiaré más las funciones para saber como moverlas :P eres un master grax :D de aqui en adelante voy yo solo.
  #10 (permalink)  
Antiguo 30/04/2011, 16:06
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Respuesta: SELECT campos iguales pero desconocidos

Hola,

Posiblemente,

Código MySQL:
Ver original
  1.   formato, peso, group_concat(dato)
  2.     peso,
  3.     formato,
  4.     concat('<a href="', link, '">', server, '</a>') dato
  5.   from table1
  6.   order by peso, formato
  7. ) datos
  8. group by peso, formato

Huuu ... me tardé mucho, seguramente la opción de gnzsoloyo es mas eficiente, aunque ... yo seguiría con la opción inicial presentada por el mismo gnzsoloyo; es decir, usar el lenguaje para mostrar los resultados agrupados y hacer un select simple ordenado por peso y formato. La ventaja de hacerlo así es que te daría versatilidad a la hora de hacer cambios en el diseño de la página web.

Saludos,

Última edición por HackmanC; 30/04/2011 a las 16:11 Razón: :)
  #11 (permalink)  
Antiguo 30/04/2011, 16:18
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: SELECT campos iguales pero desconocidos

que barbaro lo que me has dado Hackman es increible O_O¡¡ + karma, estudiaré ese código mil gracias.

Ni siquiera sabía que se pudiera hacer algo así
  #12 (permalink)  
Antiguo 30/04/2011, 16:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SELECT campos iguales pero desconocidos


...El límite es la imaginación, más que el lenguaje...

__________________
¿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: campos, iguales, select
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 15:11.