Foros del Web » Programando para Internet » PHP »

opinion

Estas en el tema de opinion en el foro de PHP en Foros del Web. Hola chicos, el siguiente codigo me funciona bien, pero creo que no es lo mas correcto. El problema que veo es que hago dos consultas ...
  #1 (permalink)  
Antiguo 07/04/2016, 03:24
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 4 meses
Puntos: 0
opinion

Hola chicos,
el siguiente codigo me funciona bien, pero creo que no es lo mas correcto.
El problema que veo es que hago dos consultas iguales para ingresar en dos tablas diferentes.
El primero ($insertar) lo hago para comprobar que no exista, si no existe le guardo.
El segundo ($insertar_2) lo hago para que vuelta a comprobar todos los registros de la tabla dibujos porque anterior he insertado uno nuevo con el primero ($insertar).

No se si es lo mas correcto esto.
Me he podido explicar bien ??

Código PHP:
Ver original
  1. $ver = mysql_query("SELECT * FROM artista");
  2.     $ver2 = mysql_num_rows($ver);
  3.    
  4.     if($ver2 == 0){
  5.        
  6.         $dibujo = mysql_query("SELECT * FROM dibujos WHERE dibujo='$id'");
  7.         $ver_dibujo = mysql_num_rows($dibujo);
  8.        
  9.         if($ver_dibujo == 0){
  10.             $insertar = mysql_query("INSERT INTO tags (dibujo) VALUES ('$di')");
  11.         }
  12.        
  13.         $dibujo = mysql_query("SELECT * FROM dibujos WHERE dibujo='$id'");
  14.         $todos = mysql_fetch_array($dibujo);
  15.         $insertar_2 = mysql_query("INSERT INTO arte (id_dibujo) VALUES ('$id')");
  16.    
  17.     }

saludos gracias
  #2 (permalink)  
Antiguo 07/04/2016, 03:39
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: opinion

Tengo varias dudas de tu código.

- En la línea 6 y en la 13 haces la misma select contra dibujos y entre esas líneas de código lo único que haces es un insert en la tabla "tags", con lo que el resultado de la select de la línea 13 será el mismo que el de la línea 6.

- Porqué en la línea 4 no pones directamente en el if la comparación contra mysql_num_rows, sin necesidad de usar la variable intermedia?

- Usa variables más descriptivas. Por ejemplo, en lugar de "ver2" se entendería mejor el código si se llamara "numeroArtistas" y lo mismo con "dibujo" que se podría llamar "numeroDibujos".
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 07/04/2016, 03:45
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: opinion

Si, hago la misma consulta en la 6 y en la 13, porque despues de la consulta 6 inserto un registro, y si no hago la misma consulta en la 13, no recoge ese nuevo registro que inserto.

se entiende ?

saludos
gracias :)

Pondre nombre mas especificos en las variables :)
  #4 (permalink)  
Antiguo 07/04/2016, 03:52
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: opinion

Cita:
Iniciado por RicardGTX Ver Mensaje
Si, hago la misma consulta en la 6 y en la 13, porque despues de la consulta 6 inserto un registro, y si no hago la misma consulta en la 13, no recoge ese nuevo registro que inserto.

se entiende ?
Pues no, no se entiende. Lo intentaré explicar lo más sencillo posible...

1) Haces una select de la tabla DIBUJOS
2) Haces un insert en la tabla TAGS
3) Haces una select de la tabla DIBUJOS

Puedes insertar todos los registros que quieras, pero mientras no sean en la tabla DIBUJOS el resultado del punto 1 y del punto 3 será siempre el mismo.
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 07/04/2016, 03:57
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 1 mes
Puntos: 270
Respuesta: opinion

Cita:
Iniciado por RicardGTX Ver Mensaje
Hola chicos,
el siguiente codigo me funciona bien, pero creo que no es lo mas correcto.
El problema que veo es que hago dos consultas iguales para ingresar en dos tablas diferentes.
El primero ($insertar) lo hago para comprobar que no exista, si no existe le guardo.
El segundo ($insertar_2) lo hago para que vuelta a comprobar todos los registros de la tabla dibujos porque anterior he insertado uno nuevo con el primero ($insertar).

No se si es lo mas correcto esto.
Me he podido explicar bien ??

Código PHP:
Ver original
  1. $ver = mysql_query("SELECT * FROM artista");
  2.     $ver2 = mysql_num_rows($ver);
  3.    
  4.     if($ver2 == 0){
  5.        
  6.         $dibujo = mysql_query("SELECT * FROM dibujos WHERE dibujo='$id'");
  7.         $ver_dibujo = mysql_num_rows($dibujo);
  8.        
  9.         if($ver_dibujo == 0){
  10.             $insertar = mysql_query("INSERT INTO tags (dibujo) VALUES ('$di')");
  11.         }
  12.        
  13.         $dibujo = mysql_query("SELECT * FROM dibujos WHERE dibujo='$id'");
  14.         $todos = mysql_fetch_array($dibujo);
  15.         $insertar_2 = mysql_query("INSERT INTO arte (id_dibujo) VALUES ('$id')");
  16.    
  17.     }

saludos gracias
No entiendo casi nada de este código.
- Partiendo de que todo lo que hay en el if, no se ejecutará en cuanto haya 1 artista en la tabla (seguro que esto tiene que funcionar así??)
- Se re-ejecuta una query sin necesidad.No, no hay que volver a hacer la query porque has insertado un registro.Puedes perfectamente hacer el num_rows, luego el fetch_array, y después los 2 inserts.Las condicion por la que ejecutas el insert no cambia si haces el fetch_array.
- Se hace el fetch_array, pero no se usa para nada.
  #6 (permalink)  
Antiguo 07/04/2016, 04:00
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: opinion

hice unos cambios en el codigo para que se entienda mejor.

Hago dos veces la consulta en la tabla dibujos, porque entre medias de cada consulta si se inserta un nuevo registro en la tabla dibujos.
En el ejemplo anterior lo puse mal. Perdon.

Por eso mi duda de si esta bien o mal asi

Código PHP:
Ver original
  1. $artista = mysql_query("SELECT * FROM artista");
  2.         $existe_artista = mysql_num_rows($ver);
  3.        
  4.         if($existe_artista == 0){
  5.            
  6.             $dibujo = mysql_query("SELECT * FROM dibujos WHERE dibujo='$id'");
  7.             $existe_dibujo = mysql_num_rows($dibujo);
  8.            
  9.             if($existe_dibujo == 0){
  10.                 $insertar_dibujo = mysql_query("INSERT INTO dibujos (dibujo) VALUES ('$di')");
  11.             }
  12.            
  13.             $tabla_dibujo_artista = mysql_query("SELECT * FROM dibujos WHERE dibujo='$id'");
  14.             $mostrar_dibujo_artista = mysql_fetch_array($tabla_dibujo_artista);
  15.             $insertar_tabla_dibujo_artista = mysql_query("INSERT INTO arte (id_dibujo) VALUES ('$id')");
  16.        
  17.         }


saludos
  #7 (permalink)  
Antiguo 07/04/2016, 04:38
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 1 mes
Puntos: 270
Respuesta: opinion

Sigo sin entenderlo, sobre todo, que el if se ejecute sólo si no hay ningun artista en la tabla.
Aunque insertes un nuevo dibujo en la tabla, los datos habrán cambiado, pero el select sigue siendo sobre el dibujo cuyo id es $id.
Hay sólo dos opciones: O un dibujo con el id $id ya existía, por lo que la segunda query te va a devolver el mismo registro que la primera, aunque insertes 1000 dibujos más.
O ese id no existía, y es posible que el nuevo dibujo tenga ese id.Si ese caso es el que se quiere cubrir (que sería bastante raro), los datos que te devolvería la query son los mismos que ya tienes en $di (a menos que ese $di,sea, de nuevo, un error de código, y ahi también quieras decir $id).Y, en ese caso, hacer un segundo select sólo tendría sentido si la tabla posee valores por defecto para otras columnas.
Finalmente, sigues sin usar para nada el resultado $mostrar_dibujo_artista.Muy posiblemente, ese segundo select, lo quieres hacer fuera del if.
  #8 (permalink)  
Antiguo 07/04/2016, 04:53
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: opinion

Creo que ayudaría saber que quiere hacer, porque con ese segundo código yo tampoco lo tengo claro. Hace consultas duplicadas, selects de datos que luego no usa....
__________________
Aviso: No se resuelven dudas por MP!
  #9 (permalink)  
Antiguo 07/04/2016, 05:40
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: opinion

Me olvido de mi codigo y explico lo que quiero hacer.

Tengo 3 tablas

artistas -> id, nombre
dibujos -> id_dibujo, dibujo
artistas_dibujos -> id_artista, id_dibujo

Lo que quiero hacer es lo siguiente.
Quiero grabar en artistas_dibujos el id del artista y el id del dibujo.
  #10 (permalink)  
Antiguo 07/04/2016, 07:18
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: opinion

Cita:
Iniciado por RicardGTX Ver Mensaje
Me olvido de mi codigo y explico lo que quiero hacer.

Tengo 3 tablas

artistas -> id, nombre
dibujos -> id_dibujo, dibujo
artistas_dibujos -> id_artista, id_dibujo

Lo que quiero hacer es lo siguiente.
Quiero grabar en artistas_dibujos el id del artista y el id del dibujo.
ok, y que datos tienes de entrada?
__________________
Aviso: No se resuelven dudas por MP!
  #11 (permalink)  
Antiguo 07/04/2016, 07:49
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: opinion

De entrada tengo el nombre de la tabla artistas y el dibujo de la tabla dibujos.


saludos
gracias
  #12 (permalink)  
Antiguo 07/04/2016, 08:05
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: opinion

Entonces es bien sencillo.

1) Select de la tabla de artistas para obtener el id al que pertenece el nombre que tienes
2) Si no te ha devuelto ningún registro...fin
3) Select de la tabla de dibujos para obtener el id al que pertenece el dibujo que tienes
4) Si no te ha devuelto ningún registro...fin
5) Haces un insert en la tabla artistas_dibujo con los dos Id's que tienes

No tiene mucha más historia
__________________
Aviso: No se resuelven dudas por MP!
  #13 (permalink)  
Antiguo 07/04/2016, 08:58
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: opinion

Una prugunta respecto de tu lógica de bd.

Tienes 2 tablas y una 3 para relacionar estas dos, si entiendo bien.

La pregunta es
¿ un dibujo puede pertenecer a uno o a varios artistas ?
Si la respuesta es a varios artistas, nada, la relación (N:N) es correcta y puedes dejar de leer este comentario.

Si la respuesta es que un dibujo solo puede pertenecer a un artista (relacion 1:N) la tabla artistas_dibujos es inecesariamente y el id_artista deberia estar en la tabla dibujos.
__________________
Unset($vida['malRollo']);
  #14 (permalink)  
Antiguo 07/04/2016, 09:17
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: opinion

Si eso lo tengo claro pero el problema me viene cuando pregunto si existe o no.
Os dejo el siguiente codigo comentado.
Espero que esta vez me haya explicado mejor.

Código PHP:
Ver original
  1. /* Compruebo primero que el "nombre_dibujo" no exista en la tabla "categorias", si no existe en la tabla "categorias", entro en el if y compruebo que el "nombre_dibujo" tampoco exista en la tabla "dibujos".
  2. Si no existe en la tabla "dibujos", lo grabo.
  3. Pero por otro lado quiero grabar el id del nombre_dibujo y el id del artista (el id del artista no tengo problema, de ejemplo fijo he puesto 95) en una tabla nueva que se llama "dibujos_artistas", se graba siempre excepto que exista en la tabla categorias.*/
  4.  
  5. $id_artista = 95;
  6.  
  7. $categorias = mysql_query("SELECT * FROM categorias WHERE dibujo='$nombre_dibujo'");
  8. $total_categorias = mysql_num_rows($categorias);
  9.  
  10. if($total_categorias == 0){
  11.    
  12.     $comprobar_tabla_dibujos = mysql_query("SELECT * FROM dibujos WHERE dibujo='$nombre_dibujo'");
  13.     $total_tabla_dibujos = mysql_num_rows($comprobar_tabla_dibujos);
  14.    
  15.     if($total_tabla_dibujos == 0){
  16.         $insertar_dibujo = mysql_query("INSERT INTO dibujos (dibujo) VALUES ('$dibujo')");
  17.     }
  18.    
  19.     $comprobar_tabla_dibujos_de_nuevo = mysql_query("SELECT * FROM dibujos WHERE dibujo='$nombre_dibujo'");
  20.     /* duplico esta consulta, porque sino no me coge el id del ultimo dibujo añadido ( no se por que ) */
  21.     $sacar_id_comprobar_tabla_dibujos_de_nuevo = mysql_fetch_assoc($comprobar_tabla_dibujos_de_nuevo);
  22.     /* utilizo assoc para saco la linea para coger el id del dibujo*/
  23.     $tgs_vi =  mysql_query("INSERT INTO dibujos_artistas (id_dibujo, id_artista) VALUES ('$id_artista', '$sacar_id_comprobar_tabla_dibujos_de_nuevo[id_dibujo]')");
  24. }


saludos
gracias

Última edición por RicardGTX; 07/04/2016 a las 09:25
  #15 (permalink)  
Antiguo 07/04/2016, 09:34
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: opinion

Para obtener el id del registro insertado puedes utilizar mysqli_insert_id

Código PHP:
Ver original 
__________________
Unset($vida['malRollo']);
  #16 (permalink)  
Antiguo 07/04/2016, 09:36
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: opinion

esque eso es justo lo que uso para obtener la id del artista pero no se usar dos veces no?
  #17 (permalink)  
Antiguo 07/04/2016, 09:37
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: opinion

Cita:
Iniciado por RicardGTX Ver Mensaje
Si eso lo tengo claro pero el problema me viene cuando pregunto si existe o no.
Os dejo el siguiente codigo comentado.
Espero que esta vez me haya explicado mejor.
Si existe el que? El autor? El dibujo? La relación autor-dibujo?
__________________
Aviso: No se resuelven dudas por MP!
  #18 (permalink)  
Antiguo 07/04/2016, 09:39
 
Fecha de Ingreso: diciembre-2015
Mensajes: 64
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: opinion

el nombre del dibujo que es porque lo que pregunto en los if

saludos
  #19 (permalink)  
Antiguo 07/04/2016, 09:42
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: opinion

Puedes utilizarlo cuantas veces necesites, eso sí, para obtener un mismo id lo normal es almacenarlo en una variable
Código PHP:
Ver original
  1. $id_my_insert=mysql_insert_id();

Teniendo en cuenta esto que nos dice el manual:

Cita:
Nota:
Como mysql_insert_id() actúa en la última consulta realizada, asegúrese de llamar a mysql_insert_id() inmediatamente después de la consulta que genera el valor.
__________________
Unset($vida['malRollo']);

Etiquetas: mysql, registro, select, tabla
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 20:20.