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

Consulta en mysql de dos tablas

Estas en el tema de Consulta en mysql de dos tablas en el foro de Mysql en Foros del Web. Hola a todos, Estoy intentando hacer una consulta, pero me vuelvo un poco loco. Tengo dos tablas: tags con un campo palabras files con un ...
  #1 (permalink)  
Antiguo 27/04/2011, 23:55
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 2 meses
Puntos: 0
Consulta en mysql de dos tablas

Hola a todos,

Estoy intentando hacer una consulta, pero me vuelvo un poco loco.

Tengo dos tablas:

tags con un campo palabras

files con un campo titulo y descripcion

Mi idea es, en una misma consulta, consultar para cada palabra el número que aparece en tags y a la vez, contar el numero de files que hay con esa palabra en titulo y descripcion. Es decir, las consultas por separado sería:

Código PHP:
SELECT palabrasCOUNT(*) AS num FROM tags GROUP BY palabras;

SELECT count(*) FROM files WHERE titulo LIKE '%palabra%' OR descripcion LIKE '%palabra%' 
¿Alguien me puede ayudar?

Gracias y un saludo,
  #2 (permalink)  
Antiguo 28/04/2011, 01:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta en mysql de dos tablas

No funcionará pero la logica seria esta

Código MySQL:
Ver original
  1. SELECT t.palabras,
  2.              COUNT(*) AS num,
  3.              (SELECT count(*)
  4.                    FROM files
  5.                       WHERE titulo LIKE '%t.palabras%'
  6.                             OR descripcion LIKE '%t.palabras%' ) as numFiles
  7. FROM tags t GROUP BY t.palabras;

'%t.palabras%'
Habría que construir una expresión regular que usara el valor de la consulta principal, no se si se puede hacer...

A ver si alguien me contradice pero yo lo que haria seria

1. Ejecutar la primera consulta
2. Recorrer el resultado con un bucle (externo, php o lo que sea)
3. Mostrar el registro ---- palabra* numero
4. Ejecutar la segunda consulta con la palabra*
5. Mostrar el resultado ---- XX files

La estructura que tines no me acaba de convencer

Tags
idTag PK
palabra Unic

Files
idFiles
nombre
titulo
descripcion
...

RelFilesTags
idRel PK
idFiles FK
idTag FK

Con esta estructura lo tendrias solucionado puesto que el numero de ocurrencias de una palabra coincidira con el numero de files relacionados, ademas los tags se guardan una sola vez con el consiguiente ahorro de espacio... y la base estaria normalizada.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 28/04/2011, 13:14
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Consulta en mysql de dos tablas

Cita:
Iniciado por quimfv Ver Mensaje
No funcionará pero la logica seria esta

Código MySQL:
Ver original
  1. SELECT t.palabras,
  2.              COUNT(*) AS num,
  3.              (SELECT count(*)
  4.                    FROM files
  5.                       WHERE titulo LIKE '%t.palabras%'
  6.                             OR descripcion LIKE '%t.palabras%' ) as numFiles
  7. FROM tags t GROUP BY t.palabras;

'%t.palabras%'
Habría que construir una expresión regular que usara el valor de la consulta principal, no se si se puede hacer...

A ver si alguien me contradice pero yo lo que haria seria

1. Ejecutar la primera consulta
2. Recorrer el resultado con un bucle (externo, php o lo que sea)
3. Mostrar el registro ---- palabra* numero
4. Ejecutar la segunda consulta con la palabra*
5. Mostrar el resultado ---- XX files

La estructura que tines no me acaba de convencer

Tags
idTag PK
palabra Unic

Files
idFiles
nombre
titulo
descripcion
...

RelFilesTags
idRel PK
idFiles FK
idTag FK

Con esta estructura lo tendrias solucionado puesto que el numero de ocurrencias de una palabra coincidira con el numero de files relacionados, ademas los tags se guardan una sola vez con el consiguiente ahorro de espacio... y la base estaria normalizada.
Hola,

Gracias por la respuesta...

Hacerlo en dos consultas lo tengo claro, pero... ¿que pasa si lo quiero ordenar por el numero de veces que aparece la palabra en titulo o en descripcion? ¿como lo tendria que hacer?

La estructura de las tablas no las puedo cambiar...

Gracias y Un saludo,
  #4 (permalink)  
Antiguo 29/04/2011, 00:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta en mysql de dos tablas

En programación externa puedes agregar el dato de la segunda consulta al array creado con el resultado de la primera y luego ordenar el array.

No se me ocurre otra forma.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 29/04/2011, 01:12
 
Fecha de Ingreso: febrero-2007
Ubicación: Valencia
Mensajes: 457
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Consulta en mysql de dos tablas

Cita:
Iniciado por quimfv Ver Mensaje
En programación externa puedes agregar el dato de la segunda consulta al array creado con el resultado de la primera y luego ordenar el array.

No se me ocurre otra forma.
Hola,

Estoy usando php, ¿me podrias guiar mas o menos como agregar el dato de la 2 consulta a la primera y ordenarlo?

Gracias y un saludo,
  #6 (permalink)  
Antiguo 02/05/2011, 01:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta en mysql de dos tablas

No se si me exprese bien....

Se trata de lanazar la primera consulta, quando tienes el resultado en un array creas un bucle y a cada vuelta del bucle lees el registro y construyes la segunda query con el valor palabra que estas leyendo en esa vuelta.

El nuevo valor lo puedes insertar en el mismo registro del array que estas leyendo....

Esto es el foro de bbdd por lo que es mejor que preguntes en php puesto que incluso creo que se podria hacer sin el array intermedio

Código PHP:
Ver original
  1. $estattags=array();
  2.  
  3. $result = mysql_query("SELECT palabras, COUNT(*) AS num, "
  4.                                              ."0 as libros FROM tags GROUP BY palabras");
  5.  
  6. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  7.     array_push($estattags, $row);
  8. }
  9.  
  10. for($e=0;$e<count($estattags);$e++){
  11.     $result = mysql_query("SELECT count(*) as libros "
  12.                                         ."FROM files WHERE titulo "
  13.                                                 ."LIKE '".$estattags[$e]["palabra"]."' "
  14.                                             ."OR descripcion "
  15.                                                  ."LIKE '".$estattags[$e]["palabra"]."'");
  16.  
  17.       $row = mysql_fetch_array($result, MYSQL_ASSOC);
  18.  
  19.       $estattags[$e]["libros"]=$row["libros"];
  20. }

Insisto pregunta en php alli seguro que tedan una buena referencia a un script para hacer lo que te falta ordenar el array final...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: 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 15:15.