Foros del Web » Programando para Internet » PHP »

problemas con INNER JOIN

Estas en el tema de problemas con INNER JOIN en el foro de PHP en Foros del Web. Hola que tal, les cuento mi problema: Lo que pasa es que cuando subo una imagen se guarda los datos del usuario en una tabla ...
  #1 (permalink)  
Antiguo 28/07/2011, 20:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 15 años, 3 meses
Puntos: 5
problemas con INNER JOIN

Hola que tal, les cuento mi problema:

Lo que pasa es que cuando subo una imagen se guarda los datos del usuario en una tabla llamada TMP_USERS y hasta que el usuario activa su cuenta se cambian los datos a la tabla USERS.

Cuando un usuario ya sea que allá activado su cuenta o no, cuando sube una imagen se le suma 1 al campo UPLOADS que esta en las tablas TMP_USERS y USERS.

Esto lo puedo lograr correctamente cuando uso una tabla ya sea TMP_USERS o USERS pero el problema esta por ejemplo si la imagen esta en USERS y yo lo compruebo con la tabla TMP_USERS hay va a estar el problema y lo quise solucionar con un INNER JOIN de esta manera:

Código PHP:
Ver original
  1. $demo = "SELECT CORREO FROM TMP_USERS TU INNER JOIN USERS U ON TU.CORREO = U.CORREO WHERE CORREO = '".mysql_real_escape_string($_POST['CORREO'])."'";
  2. $result_demo = mysql_query($demo);
  3.  
  4. if(mysql_num_rows($result_demo) == 0) {
  5.     $IUID_TMP = "";
  6.            
  7.     for($tmp = 0; $tmp <= 7; $tmp++) {
  8.         $random_tmp = array_rand($qwerty);
  9.         $demo_TMP .= $qwerty[$random_tmp];
  10.         $demo = "demo-". wordwrap($demo_TMP, 4, "-", TRUE);
  11.     }
  12.    
  13.     $USERS_TMP = "INSERT INTO TMP_USERS TU INNER JOIN USERS U ON TU.CORREO = U.CORREO VALUES('$demo', '1', '$date', '$CORREO')";
  14.     $result_USERS_TMP = mysql_query($USERS_TMP) or die (mysql_error());
  15. } else {
  16.     $UPDATE_IMG = "UPDATE TMP_USERS TU INNER JOIN USERS U ON TU.UPLOADS = U.UPLOADS SET UPLOADS = UPLOADS + 1 WHERE CORREO = '".mysql_real_escape_string($_POST['CORREO'])."'";
  17.     $result_UPDATE_IMG = mysql_query($UPDATE_IMG) or die (mysql_error());
  18. }

Y cuando trato de subir una imagen me sale este error:

Código:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/user_demo/public_html/index.php on line 69
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TU INNER JOIN USERS U ON TU.CORREO = U.CORREO VALUES('DEMO-Dasg-yi98', '1', '2011/' at line 1
Alguien que me pueda ayudar con este problema

Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 28/07/2011, 21:36
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: problemas con INNER JOIN

es un error claro de sintaxis en los insert , verifica en el manual que te acabo de dejar cual es la sintaxis del insert, la sintaxis del update, y asi te daras cuenta del error, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 29/07/2011, 12:41
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 15 años, 3 meses
Puntos: 5
Respuesta: problemas con INNER JOIN

Cita:
Iniciado por carlos_belisario Ver Mensaje
es un error claro de sintaxis en los insert , verifica en el manual que te acabo de dejar cual es la sintaxis del insert, la sintaxis del update, y asi te daras cuenta del error, saludos
Gracias carlos_belisario, entendi bien la sintaxis pero lo que no entendi es como hacer el insert o el update ya se en la tabla TMP_USER o USER dependiendo donde se encuentre el registro

Saludos
  #4 (permalink)  
Antiguo 29/07/2011, 13:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problemas con INNER JOIN

No puedes hacer un INSERT con JOIN; esa cláusula no pertenece al INSERT, y MySQL no admite INSERTs condicionales.
O lo pones en una tabla o lo pones en la otra.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 29/07/2011, 13:30
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 15 años, 3 meses
Puntos: 5
Respuesta: problemas con INNER JOIN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No puedes hacer un INSERT con JOIN; esa cláusula no pertenece al INSERT, y MySQL no admite INSERTs condicionales.
O lo pones en una tabla o lo pones en la otra.
OK muchas gracias, oye y el error: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/user_demo/public_html/index.php on line 69 a que se debe??

saludos
  #6 (permalink)  
Antiguo 29/07/2011, 13:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problemas con INNER JOIN

Si hubieses capturado el error de salida, probablemente te hubieses encontrado con un error de sintaxis, precisamente por haber intentado hacer un JOIN en un INSERT.

Un mensaje de ese tipo significa esencialmente que algo que has mandado a hacer no se puede hacer. Lo que debes hacer siempre es verificar si la sentencia se pudo ejecutar antes de intentar usar el resultado, que puede no existir.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/07/2011, 19:20
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 15 años, 3 meses
Puntos: 5
Respuesta: problemas con INNER JOIN

Bueno muchas gracias a los dos por responder.

He logrado conseguirlo de esta manera

Código PHP:
Ver original
  1. <?php
  2.  
  3. $sql_demo = "SELECT correo FROM usuarios WHERE correo = '".mysql_real_escape_string($_POST['correo'])."'";
  4. $result_demo = mysql_query($sql_demo);
  5.  
  6. $sql_demo_TMP = "SELECT correo FROM TMP_usuarios WHERE correo = '".mysql_real_escape_string($_POST['correo'])."'";
  7. $result_demo_TMP = mysql_query($sql_demo_TMP);
  8.  
  9. if(mysql_num_rows($result_demo) == 1) {
  10.     $UPDATE_IMG = "UPDATE usuarios SET subidas = subidas + 1 WHERE correo = '".mysql_real_escape_string($_POST['correo'])."'";
  11.     $result_UPDATE_IMG = mysql_query($UPDATE_IMG) or die (mysql_error());
  12. } elseif(mysql_num_rows($result_demo_TMP) == 0) {
  13.     $demo_TMP = "";
  14.            
  15.     for($tmp = 0; $tmp <= 7; $tmp++) {
  16.         $random_tmp = array_rand($qwerty);
  17.         $demo_TMP .= $qwerty[$random_tmp];
  18.         $demo = "demo-". wordwrap($demo_TMP, 4, "-", TRUE);
  19.     }
  20.    
  21.     $usuarios_TMP = "INSERT INTO TMP_usuarios VALUES('$demo', '1', '$date', '$correo')";
  22.     $result_usuarios_TMP = mysql_query($usuarios_TMP) or die (mysql_error());
  23. } else {
  24.     $UPDATE_IMG_TMP = "UPDATE TMP_usuarios SET subidas = subidas + 1 WHERE correo = '".mysql_real_escape_string($_POST['correo'])."'";
  25.     $result_UPDATE_IMG_TMP = mysql_query($UPDATE_IMG_TMP) or die (mysql_error());
  26. }
  27.  
  28. ?>

La verdad yo pienso que no es la forma mas elegante y optima de lograrlo y si alguien se pudiera ayudar a optimizarla se los agradecería mucho.

Saludos y gracias de antemano
  #8 (permalink)  
Antiguo 04/08/2011, 14:07
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 15 años, 3 meses
Puntos: 5
Respuesta: problemas con INNER JOIN

alguien que me pueda ayudar???

Saludos!

Etiquetas: html, join, mysql, sql, tabla, usuarios
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 21:52.