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

relacionar tablas con LIKE....como¿?

Estas en el tema de relacionar tablas con LIKE....como¿? en el foro de Bases de Datos General en Foros del Web. hola a todosd,bueno mi problema es que hago una consulta a dos tablas,pero cuando las relaciono lo hago asi: Código PHP: $query  =  mysql_query ( ...
  #1 (permalink)  
Antiguo 15/09/2004, 13:17
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
relacionar tablas con LIKE....como¿?

hola a todosd,bueno mi problema es que hago una consulta a dos tablas,pero cuando las relaciono lo hago asi:

Código PHP:
$query mysql_query("select favoritos.dat_id,noticias.titulo_noticia,noticia_id FROM favoritos INNER JOIN noticias ON noticias.dat_id LIKE '%$dat_id%'= favoritos.dat_id WHERE favoritos.user_name='$nick'"); 
El problema viene a que no me funcione el like(si no me equivoco no se puede usar asi en una consulta...creo:P)

quisiera conseguir el resultado de LIKE,osea que si dentro de la fila se encuentra ese dato lo relacione....no se si consegui explicarme:D

Muchas Gracias
  #2 (permalink)  
Antiguo 15/09/2004, 15:41
Avatar de orchabel  
Fecha de Ingreso: marzo-2002
Ubicación: Hundido en un rincón...
Mensajes: 401
Antigüedad: 22 años, 2 meses
Puntos: 1
Los like solo se pueden colocar después del where intenta así

select favoritos.dat_id,noticias.titulo_noticia,noticia_i d
FROM favoritos INNER JOIN noticias ON noticias.dat_id
WHERE favoritos.user_name='$nick'
AND favoritos.dat_id LIKE '%$dat_id%'

saludos!
__________________
BugHunter II
"si quieres un mañana mejor, piensa en ser mejor para un mañana"
  #3 (permalink)  
Antiguo 15/09/2004, 15:42
Avatar de orchabel  
Fecha de Ingreso: marzo-2002
Ubicación: Hundido en un rincón...
Mensajes: 401
Antigüedad: 22 años, 2 meses
Puntos: 1
además ese dat_id es numérico?.. si es así no creo que te sirva el like ...
__________________
BugHunter II
"si quieres un mañana mejor, piensa en ser mejor para un mañana"
  #4 (permalink)  
Antiguo 15/09/2004, 16:09
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
ok,gracias :D creo que fincionara,orchabel si son numeros pero estan en un campo varchar,separados por un "/" ;))
  #5 (permalink)  
Antiguo 15/09/2004, 16:23
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
no me funciona :(...algua idea mas?¿
  #6 (permalink)  
Antiguo 16/09/2004, 04:48
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
La instrucción que te puso orchabel sólo tiene un pequeño error y es que no completó la condición de cruce de las tablas:
Código:
select favoritos.dat_id,noticias.titulo_noticia,noticia_id 
FROM favoritos INNER JOIN noticias ON noticias.dat_id = favoritos.dat_id 
WHERE favoritos.user_name='$nick'
and noticias.dat_id like '%$dat_id%'
Un saludo.
  #7 (permalink)  
Antiguo 16/09/2004, 04:58
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
gracias ;) algo emos ganado :D si en la noticia solo hay un "favorito"relacionado funciona :D pero si hay mas...no :( parece que el LIKE no suge efecto,almenos no me da error ^^

gracias :D
  #8 (permalink)  
Antiguo 16/09/2004, 08:28
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Si no me equivoco para lo que tu quieres hacer la consulta es la siguiente:

SELECT favoritos.dat_id,noticias.titulo_noticia,noticia_i d FROM favoritos, noticias WHERE noticias.dat_id LIKE '%$' + favoritos.dat_id + '%' AND favoritos.user_name='$nick'
  #9 (permalink)  
Antiguo 16/09/2004, 09:43
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
en este caso me muestra todas las noticias :( sniff......pero gracias :D
  #10 (permalink)  
Antiguo 16/09/2004, 10:30
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
A la última aportación de Atzeneta le falta la condición de cruce de tablas, por eso te salen todas :P.
  #11 (permalink)  
Antiguo 16/09/2004, 12:04
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
xDDDDDDD cierto vice xDDDDDDD ahora el pongo el iner join :p
  #12 (permalink)  
Antiguo 16/09/2004, 12:10
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
ARRGRHRHGRRHGRHHRH no me muestra nada ,pero...porque sera????
  #13 (permalink)  
Antiguo 16/09/2004, 12:29
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Bueno, llegados a este punto, ¿qué quieres conseguir?, porque hasta ahora partimos de una sentencia que habías puesto para hacerte propuestas.
  #14 (permalink)  
Antiguo 16/09/2004, 15:03
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
ok,vice,haber lo que quiero es que me muestre las noticias relacionadas con los favoritos del usuario,por ejemplo si yo tego en mis favoritos mmmmmm INDIANA JONES XD que me muestre todas las noticias relacionadas con indiana jones xD.
eso es lo que quiero,tengo una tabla con los favoritos de mis usuarios y otra con las noticias :D
gracias por tener paciencia ;)
  #15 (permalink)  
Antiguo 17/09/2004, 00:47
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Pero a ver... indiana jones xD ¿Qué es?¿El valor de una variable?¿El valor del campo de un registro?... Si no sabemos esto no podemos ayudarte.
  #16 (permalink)  
Antiguo 17/09/2004, 02:05
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Pues aparte de lo que dice Atzeneta, se me ocurre que no es con el campo noticias.dat_id con el que hay que hacer el like, sino con otro campo.
El campo dat_id, es lo que relaciona ambas tablas, y por lo tanto será un código (numérico o no), así que el like tienes que hacerlo con el campo que contiene el texto de la noticia.
Un saludo.

Última edición por Vice; 17/09/2004 a las 02:07
  #17 (permalink)  
Antiguo 17/09/2004, 02:57
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
ok,perdon por no exlica la estructura de las tablas :D

esta esla tabla noticias:
CREATE table noticias (
noticia_id TINYINT(4) AUTO_INCREMENT,
autor VARCHAR(32),
titulo_noticia VARCHAR(250),
sub_titulo VARCHAR(250),
noticia TEXT,
fecha DATETIME,
dat_id VARCHAR(250),
visitas INT(10),
UNIQUE (noticia_id) );

como vereis dat_id es un varchar,ya que asi le puedo poner "/" que en principio es el signo que tendria que separar los "relacionados"con la noticia,pero ademas asi puedo poner tantos relacionados como quiera.

El de favoritos es asi:
CREATE table favoritos(
fv_id TINYINT(4) AUTO_INCREMENT,
user_name VARCHAR(40),
dat_id VARCHAR(40),
UNIQUE (fv_id) );

lo que seria es lo siguiente,yo voy y agrego a mis favoritos....mmmmm forosdelweb,y ahora voy a leer noticias relacionadas con forosdelweb,lo que hace el sistema es comparar el dat_id de favoritos con eldat_id de noticias,asi sabe que datos entran en la noticia,luego con un where sabe a que user pertenecen

:P es un poco liosos quizas nuse ^^u... si se os ocurre una mejor manera xf decidmela :D es que leido asi....ni yo em entiendo xD
  #18 (permalink)  
Antiguo 17/09/2004, 05:22
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Si no he entendido mal lo que tu quieres es hacer una relación varios - varios. Para construir este tipo relación tendrías que crear una tabla intermedia que relacione las dos anteriores de la forma siguiente:

CREATE table tblRelacion (
relacion_id TINYINT(4) AUTO_INCREMENT,
moticia_id INT(4),
fv_id INT(4),
UNIQUE (relacion_id) );

A partir de aquí unes las dos tablas e introduces los filtros que consideres oportunos:

SELECT noticias.*, favoritos.* FROM tblRelacion INNER JOIN noticias ON tblRelacion.noticia_id=noticias.noticia_id INNER JOIN favoritos ON tblRelacion.fv_id=favoritos.fv_id WHERE .......
  #19 (permalink)  
Antiguo 17/09/2004, 06:05
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
mmmm no se si te entendi xD pero creo que no es mala idea,no se si funcionara :D lo probare esta tarde,gracias ;)
  #20 (permalink)  
Antiguo 17/09/2004, 08:11
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
ahora se me presenta una duda existencial.....xD como lo puedo hacer para que si inserto mas de 1 dato relacionado me inserte cada dato en una fila distinta? si se soluciona creo que ya tendre el problema solucionado :D,inserto cada dato relacionado desde un form,cada dato en un form distinto,puede tener un maximo de 10 datos relacionados:P

gracias
  #21 (permalink)  
Antiguo 18/09/2004, 04:14
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
No entiendo muy bien que es lo que quieres decirme. En los casos de tablas intermedias puedes introducir todos los registros que quieras y relacionarlos como desees.
  #22 (permalink)  
Antiguo 18/09/2004, 08:04
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
como podria hacerlo de una "sola tirada",con un while?para que me insertara con una sola consulta de una vez todos los registros,si hay 2 pues dos,si hay 10 pos 10 ^^

se hace de forma normal?

gracias :D
  #23 (permalink)  
Antiguo 19/09/2004, 03:51
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
¿Que lenguaje de programación utilizas?
  #24 (permalink)  
Antiguo 19/09/2004, 11:28
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
SQL+php :D
  #25 (permalink)  
Antiguo 20/09/2004, 04:22
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Yo no conozco mucho el php, sulo trabajar siempre con asp, pero la estructura de la programación vendría a ser la misma:

Recorres toda la tabla noticias y, en cada registro recorres el campo dat_id utilizando funciones de string y vas extrayendo las cifras encerradas entre las comas. Para cada extracción realizas un INSERT INTO a la tabla intermedia de forma que el campo id_noticia sea el identificador de la tabla noticias y el campo fv_id sea la cifra que extraes, mediante funciones de texto, encerrada entre las comas.

¿¿Has podido entender algo o me he expresado mal?
  #26 (permalink)  
Antiguo 21/09/2004, 09:16
 
Fecha de Ingreso: mayo-2004
Mensajes: 571
Antigüedad: 20 años
Puntos: 0
creo que no entendi lo que me quisiste decir ^^u soy duro de mollera :D perdona por no responder antes :( dios tengo un caos por vida xD

gracias :D
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 17:24.