Foros del Web » Programando para Internet » PHP »

Como realizar esta consulta relacional PHP-MYSQL

Estas en el tema de Como realizar esta consulta relacional PHP-MYSQL en el foro de PHP en Foros del Web. Hola amigos, por lo general siempre había programado php con mysql pero consultas básicas, pero se me ha planteado un problema en el que me ...
  #1 (permalink)  
Antiguo 22/04/2009, 15:23
 
Fecha de Ingreso: marzo-2007
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Como realizar esta consulta relacional PHP-MYSQL

Hola amigos, por lo general siempre había programado php con mysql pero consultas básicas, pero se me ha planteado un problema en el que me veo un poco atrancado, en los tiempos que estudiaba y viendo los apuntes mas o menos se como hacerlo en sql, pero en ningún manual he encontrado como hacerlo consultando desde php.

Haber tengo 3 tablas por ejemplo:
Cita:
Contenido: idcontenido, nombre, descripción.
Etiquetas: idetiqueta, nombre.
Eticon: idetiqueta, idcontenido.(Esta la tengo pa relacionar las anteriores puesto que una etiqueta puede tener muchos contenido y viceversa, No se si puedo relacionarlos de otra manera, agradecería sugerencias).
Bueno pues quiero recuperar todos los datos de contenidos, mostradolos en una tabla, que tengan una determinada etiqueta.
La única manera que me viene a la cabeza seria:

Cita:
$query = mysql_query("Select idcontenido from eticon where idetiqueta=$"variable de idetiqueta"");
while($row = mysql_fetch_array($query)){
$result = mysql_query("Select * from contenido where idcontenido=$idcontenido");
$row2 = mysql_fetch_array($result);

echo $row2(nombre) $row2(descripcion)//##lo pongo asi a modo de resumen##
}
Pero de esta manera creo que hago demasiadas consultas y no veo claro que estuviese optimizado. ¿Algún ejemplo de como hacerlo, en una mismo consulta o de algun otro modo?
No estoy muy relacionado con tecnicismos así que agradecería una breve descripción en caso de utilizarlos.
Muchas gracias a todos.

Última edición por dijor69; 22/04/2009 a las 15:44
  #2 (permalink)  
Antiguo 22/04/2009, 15:29
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Código:
SELECT * FROM Contenido WHERE nombre IN  (SELECT nombre FROM Etiquetas)
??? por ejemplo??, no se si he entendido bien la pregunta sorry

en fin.. debido al "gracioso" sistema anti-spam, me he quedado sin mi respuesta (en condiciones), lo siento. El caso es que esa solución o la misma con ANY, son casi equivalentes, debería ser lo más sencillo

Un saludo

Última edición por GatorV; 22/04/2009 a las 15:41
  #3 (permalink)  
Antiguo 22/04/2009, 15:42
 
Fecha de Ingreso: marzo-2007
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Cita:
Iniciado por f0n Ver Mensaje
Código:
SELECT * FROM Contenido WHERE nombre IN  (SELECT nombre FROM Etiquetas)
??? por ejemplo??, no se si he entendido bien la pregunta sorry
Lo mismo no me he explicado bien, que me suele pasar.

Haber en la tabla contenido tengo contenidos de post de blog por ejemplo.
y en la tabla etiquetas tengo el nombre de las etiquetas de los post. Estos los relaciono con la tabla eticon, poniendo el idetiqueta y el icontenido.
*De dato tengo el id de la "idetiqueta".
Pues con las tablas que digo arriba, quiero listar el nombre y la descripción de todos los datos de la tabla contenido que tienen la etiqueta del "idetiqueta".


PD: Para que sirve el IN que me pones?
  #4 (permalink)  
Antiguo 22/04/2009, 15:50
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Mi consulta básicamente lo que hace es originar una relación de salida que tiene el esquema de Contenido y las tuplas que verifican que el atributo "nombre", se encuentre en Etiquetas. Básicamente.. si un registro de Contenido tiene una etiqueta en Etiquetas "o en Etiquetas existe un nombre que sea igual al de Contenido", lo devuelve.

Para estar más seguro podrías hacer el producto cartesiano de las tablas Contenido y Eticon y luego hacer la proyeccion de los atributos de Contenido. Sería algo así

Código:
SELECT C.idcontenido, nombre, descripcion FROM Contenido C, Eticon E WHERE C.idcontenido = E.idcontenido
Nota: Por si no lo sabes la C y la E son alias de Contenido y Eticon, sólo que la cláusula AS no es obligatoria
Un saludo
  #5 (permalink)  
Antiguo 22/04/2009, 16:06
 
Fecha de Ingreso: marzo-2007
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Cita:
Iniciado por f0n Ver Mensaje
Mi consulta básicamente lo que hace es originar una relación de salida que tiene el esquema de Contenido y las tuplas que verifican que el atributo "nombre", se encuentre en Etiquetas. Básicamente.. si un registro de Contenido tiene una etiqueta en Etiquetas "o en Etiquetas existe un nombre que sea igual al de Contenido", lo devuelve.

Para estar más seguro podrías hacer el producto cartesiano de las tablas Contenido y Eticon y luego hacer la proyeccion de los atributos de Contenido. Sería algo así

Código:
SELECT C.idcontenido, nombre, descripcion FROM Contenido C, Eticon E WHERE C.idcontenido = E.idcontenido
Nota: Por si no lo sabes la C y la E son alias de Contenido y Eticon, sólo que la cláusula AS no es obligatoria
Un saludo
Creo que si es esto lo que necesito, pero el caso esta en que yo ya se que el contenido esta en la tabla eticon pero puede estar con varios idetiquetas diferentes, entonces necesito sacar todos los que tengan como idetiqueta el valor 04 por ejemplo.

Saludos y muchas muchas gracias por tu ayuda
  #6 (permalink)  
Antiguo 22/04/2009, 16:18
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Al revés, sigue preguntando que mañana tengo examen de Bases de datos y me viene bien xD
  #7 (permalink)  
Antiguo 22/04/2009, 16:30
 
Fecha de Ingreso: marzo-2007
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Cita:
Iniciado por f0n Ver Mensaje
Al revés, sigue preguntando que mañana tengo examen de Bases de datos y me viene bien xD
jejeje, pues lo que te comento en el post anterior, eso es lo que necesito, pero como pongo que solo me muestre los que E.idetiquetas = '4'.

Seria asi?
SELECT C.idcontenido, nombre, descripcion FROM Contenido C, Eticon E WHERE C.idcontenido = E.idcontenido AND E.idetiquetas = '4'

Esque estas cosas utilizandolas mas o menos amenudo salen bien, pero no he hecho una consulta mezclando dos tablas desde hace 4 años cuando estudiaba.

Suerte con el examen
  #8 (permalink)  
Antiguo 22/04/2009, 16:35
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Sip, exacto, bueno si no me equivoco es E.idetiqueta no?

Un saludo y gracias jeje
  #9 (permalink)  
Antiguo 22/04/2009, 16:37
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Sólo como observación, es más legible usar JOIN para relacionar tablas. En este caso, sería:
Código MySQL:
Ver original
  1. SELECT C.idcontenido, nombre, descripcion FROM Contenido C JOIN Eticon E ON C.idcontenido = E.idcontenido;
El filtro que mencionas, sí, lo puedes hacer con WHERE, de la forma como dices.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Última edición por David; 22/04/2009 a las 16:44
  #10 (permalink)  
Antiguo 22/04/2009, 16:40
 
Fecha de Ingreso: marzo-2007
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Cita:
Iniciado por f0n Ver Mensaje
Sip, exacto, bueno si no me equivoco es E.idetiqueta no?

Un saludo y gracias jeje
EXACTO!!!!!!!!! Muchisimas gracias, ya lo conseguí
Si quieres tengo una base de datos que normalizar y practicas. jejeje es broma
De verdad, muchas gracias.
Voy a seguir haber si me surgen mas dudas, aunque creo que esa sera la única puesto que todo lo que necesito para hacer el portal se basa en esas consultas.

Saludos y mucha suerte
  #11 (permalink)  
Antiguo 22/04/2009, 16:44
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

David, es cierto... lo gracioso es que tengo hasta esa "mala constumbre" en Algebra relacional de hacer el producto cartesiano y luego una restricción de igualdad en vez de simplemente hacer una concatenación natural o la que fuere, pero dado que ésta es una regla derivada, pues lo hago casi por inercia. Esto obviamente se traslada al SQL cuando programo jeje.

Dijor, si te digo la verdad aspiro a aprobar mañana y a olvidarme de esta asignatura durante muuuucho tiempo jejeje.
  #12 (permalink)  
Antiguo 22/04/2009, 16:55
 
Fecha de Ingreso: marzo-2007
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Cita:
Iniciado por f0n Ver Mensaje
David, es cierto... lo gracioso es que tengo hasta esa "mala constumbre" en Algebra relacional de hacer el producto cartesiano y luego una restricción de igualdad en vez de simplemente hacer una concatenación natural o la que fuere, pero dado que ésta es una regla derivada, pues lo hago casi por inercia. Esto obviamente se traslada al SQL cuando programo jeje.

Dijor, si te digo la verdad aspiro a aprobar mañana y a olvidarme de esta asignatura durante muuuucho tiempo jejeje.
Pues que quieres que te diga, pero yo en mi tiempo, base de datos era una de mis asignaturas preferidas, me gustaba, se me daba bien y no seguí con ello por que nadie quiere un técnico para ese tipo de trabajos, todo el mundo busca ingenieros.
Y la verdad si hubiese seguido estudiando la carrera seguro que me hubiese decantado para cualquier cosa que conllevara base de datos.
En fin, ahora por lo menos tengo un curro de funcionario, que me permite poder tener la programación php y mysql como hobby.
  #13 (permalink)  
Antiguo 22/04/2009, 17:06
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

No si a ver, no digo que no me guste, sino que ahora mismo, como con cualquier cosa, pues acabas un poco quemado de tanta tablita y tanta historia (síndrome de quiero acabar los exámenes). Yo está claro que voy a tirar por la rama del software, lo que no tengo claro todavía en qué en concreto.

dijor, sino te molesta, y es que a estas horas uno es muy cotilla, de qué trabajas?
  #14 (permalink)  
Antiguo 22/04/2009, 17:20
 
Fecha de Ingreso: marzo-2007
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Como realizar esta consulta relacional PHP-MYSQL

Cita:
Iniciado por f0n Ver Mensaje
No si a ver, no digo que no me guste, sino que ahora mismo, como con cualquier cosa, pues acabas un poco quemado de tanta tablita y tanta historia (síndrome de quiero acabar los exámenes). Yo está claro que voy a tirar por la rama del software, lo que no tengo claro todavía en qué en concreto.

dijor, sino te molesta, y es que a estas horas uno es muy cotilla, de qué trabajas?
Trabajo dinamizador informático 4 horas al dia, enseñando a niños, trabajadores, mujeres y ancianos a utilizar ordenadores, internet y demás, los fines de semana de camarero y eventualmente cuando me sale algo hago paginas webs, posicionamiento, reparaciones de ordenadores y si no sale nada pues lo hago de forma altruista por practicar.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:56.