Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/03/2011, 18:36
javiDP
 
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!