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

Seleccionar de dos tablas de una BD contenido por palabr clave

Estas en el tema de Seleccionar de dos tablas de una BD contenido por palabr clave en el foro de Mysql en Foros del Web. Hola gente, soy nuevo en el foro, y me interesa mucho que me puedan ayudar en esto. Disculpar si ya lo habia explicado en otro ...
  #1 (permalink)  
Antiguo 20/03/2011, 14:55
 
Fecha de Ingreso: marzo-2011
Ubicación: Córdoba
Mensajes: 11
Antigüedad: 13 años, 1 mes
Puntos: 0
Seleccionar de dos tablas de una BD contenido por palabr clave

Hola gente, soy nuevo en el foro, y me interesa mucho que me puedan ayudar en esto. Disculpar si ya lo habia explicado en otro tema pero la verdad no lo encontre.

Tengo una base de datos "bd_galeria" donde dentro de esta, estan varias tablas que representan "temas" o "albunes" que contienen fotos. Cada tabla tiene los mismos campos. Seria algo asi.

bd_galeria:

tema_01 (capos: titulo_foto, codigo_foto, p_clave_01, p_clave_02, p_clave_03)
tema_02 (capos: titulo_foto, codigo_foto, p_clave_01, p_clave_02, p_clave_03)
tema_03 (capos: titulo_foto, codigo_foto, p_clave_01, p_clave_02, p_clave_03)

Entonses cada tema tiene tal cantidad de fotos ejemplo 10 fotos. Y cada foto tiene su titulo_foto,codigo_foto, y 3 palabras claves (p_clave_01,p_clave_02,p_clave_03).

Aca viene mi pregunta.
Necesito hacer una consulta donde pueda seleccionar todos los temas (tablas) de la base de datos "bd_galeria" y seleccionar solo aquellas fotos que coincidan con una palabra clave seleccionada por el usuario. Ejemplo:
Si estoy en el "tema_01" - en la primer foto - con titulo "el campo".. y como palabra clave tiene.. "campo", "caballo", "La Pampa" ejemplo. Si yo seleccion "campo", quiero que me devuelva toodas las fotos de todas los temas que coincidan con ESA palabra clave...
Como hago?..
Mi codigo es este. (pero no funciona bien).
------------------------------------------------------------------------------------------------------
<?
include("conexion.php");
$resultado = mysql_query("SELECT * FROM tema_01, tema_02, tema_03 WHERE p_clave_01='$pclave' OR p_clave_02='$pclave' OR p_clave_03='$pclave' ");

while($campos = mysql_fetch_array($resultado)){
echo "Titulo de Foto: $campos[titulo_foto]<br />";
echo "Codigo Foto: $campos[codigo_foto]<br />";
echo "<hr align=\"left\" width=\"160\">";
};
?>
------------------------------------------------------------------------------------------------------
la variable $pclave seria la palabra clave que selecciona el usuario ejemplo "campo"

Espero su pronta respuesta . Gracias!

Última edición por pablopgp_lm; 20/03/2011 a las 15:01
  #2 (permalink)  
Antiguo 20/03/2011, 15:39
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: Seleccionar de dos tablas de una BD contenido por palabr clave

Revisa tu diseño de la base de datos, no se deben crear tablas que en lo unico que se diferencien sea en el nombre.

Deberias crear mejor algo asi:

bd_galeria:

temas(id_tema, nombre_tema)
fotos(id_foto, id_tema_foto, titulo_foto, codigo_foto, p_clave)

Donde id_tema_foto es una foreign key de temas.id_tema y p_clave contenga las claves separadas por espacios, comas o por cualquier cosa.

Asi te evitas inconsistencias y redundancia de datos.

Despues para consultar todas las fotos que tengan cierta palabra clave, lo haces asi:

Código:
select * from fotos where p_clave like '%palabraclaveabuscar%';
Eso te buscara todas las fotos que contengan la palabraclaveabuscar.

Si quieres todas las fotos que tengan cierta palabra clave y un tema especifico, lo harias asi:

Código:
select * from fotos where p_clave like '%palabraclaveabuscar%' and id_tema = 1;
Eso te devolveria todas las fotos que tengan la palabraclaveabuscar y que sean del tema 1.

Un saludo!
  #3 (permalink)  
Antiguo 20/03/2011, 16:27
 
Fecha de Ingreso: marzo-2011
Ubicación: Córdoba
Mensajes: 11
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Seleccionar de dos tablas de una BD contenido por palabr clave

JaviDp gracias por el consejo y por la pronta respuesta je . Lo que yo ahora quiero preguntarte:

Yo en la bd_fotos tengo tablas para que en cada tabla (tema) pueda cargar las fotos con toda su informacion. Seria

bd_fotos:
Tabla: tema_01 (campos: id, titulo_foto, codigo_foto, p_clave_01, p_clave_02, p_clave_03)
Tabla: tema_03 (campos: id, titulo_foto, codigo_foto, p_clave_01, p_clave_02, p_clave_03)
Tabla: tema_03 (campos: id, titulo_foto, codigo_foto, p_clave_01, p_clave_02, p_clave_03)

etc...
Mientras se navega por cada tema no hay problema. Es decir si el usuario va al tema_01 que se llama..ejem "Atardeceres", se generará una lista de todas las fotos que tiene ese tema (tabla) cargada. La consulta se hace dentro de la misma tabla y no hay problema.
Mi problema es que por cada foto, quiero cargar 3 palabras claves que le apareceran como LINK al usuario en la descripción de cada foto. Por eso puse p_clave_01, p_clave_02, p_clave_03.
Entoses ya ahi se me complica porque necesito hacer una consulta que me seleccione primero todos los temas (tablas) y me discrimine aquellas fotos que coincidan con la palabra clave elegida por el usuario. Luego que me arroje ese listado de las fotos.

Estoy haciendo mal mi diseño de la bd? o habria alguna forma de realizar lo que yo digo con esta extructura?.
No se si me explico jeje. Cualquier cosa tengo un ejemplo de un sitio Web que tomo como modelo. Saludos!
  #4 (permalink)  
Antiguo 20/03/2011, 18:36
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: Seleccionar de dos tablas de una BD contenido por palabr clave

Hombre todo es relativo...si tu base de datos no va a ser para algo importante y sabes que no va a tener un volumen de datos grande pues si la puedes dejar asi...si no debes diseñarla como te he expuesto.

El problema con las bd es que si de principio no la diseñas bien luego te vas a comer la cabeza con problemas de lentitud y tamaño.

Por otro lado, para hacer lo que tu quieres, o bien haces tantos select como temas tengas, o haces 1 solo select que agrupe todas las tablas. Ejemplos:

Código MySQL:
Ver original
  1. select * from tema_01 where p_clave_01 != 'palabraadiscriminar' and p_clave_02 != 'palabraadiscriminar' and p_clave_03 != 'palabraadiscriminar';
  2. select * from tema_02 where p_clave_01 != 'palabraadiscriminar' and p_clave_02 != 'palabraadiscriminar' and p_clave_03 != 'palabraadiscriminar';
  3. select * from tema_03 where p_clave_01 != 'palabraadiscriminar' and p_clave_02 != 'palabraadiscriminar' and p_clave_03 != 'palabraadiscriminar';

Este ejemplo te daria todas las fotos de todos los temas que no tuvieran la palabra clave a discriminar.

En 1 sola consulta:

Código MySQL:
Ver original
  1. select t1.*, t2.*, t3.* from tema_01 t1, tema_02 t2, tema_03 t3 where t1.p_clave_01 != 'palabraadiscriminar' and t1.p_clave_02 != 'palabraadiscriminar' and t1.p_clave_03 != 'palabraadiscriminar' and t2.p_clave_01 != 'palabraadiscriminar' and t2.p_clave_02 != 'palabraadiscriminar' and t2.p_clave_03 != 'palabraadiscriminar and t3.p_clave_01 != 'palabraadiscriminar' and t3.p_clave_02 != 'palabraadiscriminar' and t3.p_clave_03 != 'palabraadiscriminar;

Ese select haria lo mismo, salvo por una gran diferencia, cada fila devuelta del select contiene las 3 filas juntas de cada tema, por lo tanto cada 6 columnas son los datos de la otra tabla. Seria algo asi:

Columnas: t1.id | t1.titulo_foto | t1.codigo_foto | t1.p_clave_01 | t1.p_clave_02 | t1.p_clave_03 | t2.id | t2.codigo_foto | t2.p_clave_01 | t2.p_clave_02 | t2.p_clave_03 | t3.id | t3.titulo_foto | t3.codigo_foto | t3.p_clave_01 | t3.p_clave_02 | t3.p_clave_03

Por lo tanto a la hora de recoger los datos con php, en el array donde lo recoges, debes tener en cuenta que de $array[0] hasta $array[5] son los datos de la primera tabla, de $array[6] hasta $array[11] los de la segunda tabla y de $array[12] hasta $array[17] los de la tercera.


Como ves todo es muy engorroso, y diseñando la tabla como yo te expuse antes, la unica consulta select que debes hacer seria asi:

Código MySQL:
Ver original
  1. select * from fotos where p_clave not like '%palabraadiscriminar%';

Hace lo mismo que las otras consultas de arriba y es mucho mas simple no? Y mas eficiente, mejor estructurado y consume menos tamaño. Piensa en diseñarla de nuevo, sera mucho mejor que lo que quieres hacer.

Un saludo!
  #5 (permalink)  
Antiguo 20/03/2011, 18:57
 
Fecha de Ingreso: marzo-2011
Ubicación: Córdoba
Mensajes: 11
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Seleccionar de dos tablas de una BD contenido por palabr clave

jeje javiDP muchas gracias por la buena onda y las molestias! exelente explicación. Y tenes toda la razon si no hago la BD bien de entrada ya despues me es un lio. Pero gracias por darme la otra opcion! ya lo vamos a probar y veré que sale.

Nuevamente Muchas gracias! Saludos!!!

Etiquetas: bd, clave, contenido, seleccionar, tablas
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 18:35.