Foros del Web » Programando para Internet » PHP »

PHP y MySQL.. Duda.

Estas en el tema de PHP y MySQL.. Duda. en el foro de PHP en Foros del Web. Que tal foreros. Resulta que yo estoy desarrollando con alguien más unos scripts en PHP y MYSQL, se trata de un script que va a ...
  #1 (permalink)  
Antiguo 29/11/2003, 11:30
Avatar de cubis  
Fecha de Ingreso: abril-2002
Ubicación: Medellín
Mensajes: 1.040
Antigüedad: 14 años, 7 meses
Puntos: 2
PHP y MySQL.. Duda.

Que tal foreros.

Resulta que yo estoy desarrollando con alguien más unos scripts en PHP y MYSQL, se trata de un script que va a mostrarme el artículo, quien lo escribio, su URL, su mail otro par de datos más.

Entonces tengo 2 tablas

Artículos
-------------------------------------------------------------------------
id_articulo | id_autor | título | artículo | descripción | fecha |
------------------------------------------------------------------------- |

Autores
---------------------------------------------------------
id_autor | nombre | email | url | país | sobre |
-------------------------------------------------------- |

Entonces necesito que la tabla artículos tome los datos del autor de la tabla Autores, es decir, o del doy el ID del autor y puedo ya trabajar con el resto de datos, osea, puedo mostrar el resto de datos, su mail, Url etc.

Aquí viene la cosa yo estuve consultando y encontré que las tablas INNODB aceptan claves foraneas que para los que no sepan lo que hacen es tomar el el dato de un campo desde otro tabla externa a la cual el campo hace referencia (eso es lo que yo precisamente quiero hacer), así lo entiendo yo, aunque si estoy equivocado estaria muy agradecido si alguien me corrige.

Y otra cosa que me dijo jpinedo son las uniones que aparentemente hace lo mismoq ue las claves foraneas.

La verdad estoy confundido necesito entender cada uno de los conceptos y saber cual metodo usar o si se pueden usar las dos.. ventajas y desventajas... en lo posibl euna explicación de que hace cada uno.

Muchas gracias de ante mano.
__________________
[color=gray][size=1]Usuario Registrado de Linux #315639

Última edición por cubis; 29/11/2003 a las 12:03
  #2 (permalink)  
Antiguo 29/11/2003, 14:13
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 14 años, 10 meses
Puntos: 5
Realmente las claves foraneas (al menos en MySQL) solo sirven para mantener una relación entre dos tablas en base a un campo determinado.

Dado lo anterior, el procedimiento para conseguir lo que buscas sería identico teniendo Foreign Keys o no.

Realizar uniones es el método más efectivo (y eficiente) para conseguirlo, aunque tambien puede hacerse con un query convencional que use las tablas involucradas.

Breve Ejemplo Con union

SELECT
a.título,
a.articulo,
a.descripción,
a.fecha,
b.nombre,
b.email,
b.url,
b.pais,
b.sobre

FROM Articulos a

LEFT JOIN Autores b USING(id_autor)


Una equivalencia exacta a esa última línea es:

LEFT JOIN Autores b ON a.id_autor=b.id_autor


Saludos!!

PD.- Este post seguro va para el foro de Bases de datos...
__________________
Manoloweb
  #3 (permalink)  
Antiguo 29/11/2003, 14:22
Avatar de cubis  
Fecha de Ingreso: abril-2002
Ubicación: Medellín
Mensajes: 1.040
Antigüedad: 14 años, 7 meses
Puntos: 2
Cita:
Mensaje Original por Manoloweb

Breve Ejemplo Con union

SELECT
a.título,
a.articulo,
a.descripción,
a.fecha,
b.nombre,
b.email,
b.url,
b.pais,
b.sobre

FROM Articulos a

LEFT JOIN Autores b USING(id_autor)


Una equivalencia exacta a esa última línea es:

LEFT JOIN Autores b ON a.id_autor=b.id_autor


Saludos!!

PD.- Este post seguro va para el foro de Bases de datos...
Oye... y para que sirve dar la relación con Foreign Keys?..

- Que resultado arrojaria esa sentacia SQL?

PD: Si.. Jejeje.. esque deberia estar en bases de datos, solo que aquí en PHP hay más maestros ;).. y algunos no visitan el foro de base de datos

Saludos y muchas gracias Manoloweb.
__________________
[color=gray][size=1]Usuario Registrado de Linux #315639
  #4 (permalink)  
Antiguo 29/11/2003, 20:14
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 13 años, 2 meses
Puntos: 41
Cubis:
Lo mismo que te puso Manoloweb ya te lo había respondido yo antes.. sólo que más específico para lo que tú querías...

También entiendo que, ya teniendo la solución, lo que buscas ahora es una explicación sobre las claves foráneas en Mysql...

Lo más recomendable es siempre recurrir al manual:
Acá te dejo el link:
http://www.mysql.com/doc/en/ANSI_diff_Foreign_Keys.html

Está bien interesante... léelo.

Saludos

Última edición por jpinedo; 29/11/2003 a las 20:17
  #5 (permalink)  
Antiguo 29/11/2003, 20:26
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 13 años, 2 meses
Puntos: 41
Y leyendo más en el manual, te encuentras algún ejemplo sencillo de INNODB como éste:
Código:
CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id),
             FOREIGN KEY (parent_id) REFERENCES parent(id)
             ON DELETE SET NULL
) TYPE=INNODB;
Revisa
http://www.mysql.com/doc/en/InnoDB_f...nstraints.html

Como te digo, casi todo está en el manual... también es interesante leer los comentarios de los usuarios. Ahora... hay que estar atentos a la versión de Mysql requerida.

Saludos

Última edición por jpinedo; 29/11/2003 a las 20:27
  #6 (permalink)  
Antiguo 29/11/2003, 20:29
Avatar de cubis  
Fecha de Ingreso: abril-2002
Ubicación: Medellín
Mensajes: 1.040
Antigüedad: 14 años, 7 meses
Puntos: 2
Jorge.. si fuera posible que me dieras tu MSN para hacerte una pregunta.. es mi duda principal y es algo larguito como para postearlo aquí..

Gracias.
__________________
[color=gray][size=1]Usuario Registrado de Linux #315639
  #7 (permalink)  
Antiguo 29/11/2003, 20:53
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 13 años, 2 meses
Puntos: 41
Y todavía más específico, encontré este pequeño artículo donde se explica lo de las claves foráneas:
http://webmaster.bankhacker.com/ayud...-key+en+MySQL/

Saludos
PD: Sobre el MSN. Te respondo por MP.
  #8 (permalink)  
Antiguo 29/11/2003, 20:59
Avatar de cubis  
Fecha de Ingreso: abril-2002
Ubicación: Medellín
Mensajes: 1.040
Antigüedad: 14 años, 7 meses
Puntos: 2
EL MP dice que no puedes usar el MSN porq y ya.. el resto no llegó o no sé pero igual.. les pongo la situación

Tenemos las tablas ya nombras, las que nombré en el primer mensaje, entonces vinculo las claves, lo que quiero es que al yo meter un registro a la tabla artículos yo tenga que poner un autor (el id) y que este valla a la tabla autores y mire si está y si está inserta el artículo, sino no lo inserta... esto se puede hacer con claves foraneas?
__________________
[color=gray][size=1]Usuario Registrado de Linux #315639
  #9 (permalink)  
Antiguo 30/11/2003, 00:16
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 13 años, 2 meses
Puntos: 41
Creo que lo que quieres puede estar por acá:
http://www.mysql.com/doc/en/INSERT_SELECT.html

Revisa sobre todo los comentarios de los usuarios.
Por ahí hay uno que dice algo de:
INSERT INTO tab VALUES (1, (SELECT MAX(N) FROM tab))...
Que sería EXACTAMENTE lo que tú quieres hacer.
La verdad no tuve mucho tiempo de verlo... es que tengo algo de problemas con el inglés y me toma un poco de tiempo entender bien las cosas...
Pero ahí dejé el link... revísalo...
Te recuerdo leer bien sobre la versión de Mysql que soporta esta sintaxis.

Y de plano, siempre tienes la opción de hacerlo "a mano" o sea hacer una consulta a la tabla de Autores buscando el autor y obteniendo el id... Si no lo encuentra, no insertas... Si lo encuentra, insertas... Hasta me parece que habría más control en cuanto a los mensajes de error que quieras poner.. (fácil me puedo estar equivocando)...

Saludos
  #10 (permalink)  
Antiguo 30/11/2003, 00:20
Avatar de cubis  
Fecha de Ingreso: abril-2002
Ubicación: Medellín
Mensajes: 1.040
Antigüedad: 14 años, 7 meses
Puntos: 2
Tienes razón en cuanto a lo de hacerlo a mano, es más, a si mismo quízas lo valla hacer, aunque el resto lo estoy buscando porque me parece interesante y quízas luego me sirva para otra aplicación.

Gracias.
__________________
[color=gray][size=1]Usuario Registrado de Linux #315639
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 05:41.