entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Consulta UPDATE SQL

Buenas.

Tengo la siguiente query SQL:

$sql = mysql_query("UPDATE smf_members SET email_address = EmailACambiar WHERE member_name in (SELECT Username FROM usuarios WHERE EmailEnCambio > 0 AND $fecha_actual > FinUnixEmail)");

Lo que busco hacer es setear en email_address de smf_members el mismo valor que tiene EmailACambiar en usuarios aquel usuario (o Username) que tenga EmailEnCambio > 0 y la fecha actual sea mayor a la fecha unix FinUnixEmail.

No sé si me logro explicar bien pero, básicamente creo que el problema está en que EmailACambiar no pertenece a smf_members si no a usuarios y yo quiero setearle el valor de EmailACambiar en otra tabla. Creería que el único problema es ese. Ya que, al momento de cambiar EmailACambiar por '1' para testear si el resto de la query SQL funcionaba, dio resultado.

¿Cómo podría hacer?

Gracias.

2 Respuestas

2votos

Leonardo-Tadei Puntos227010

Hola @KevinLeyes,

si lo podés hacer ejecuntado 2 querys, según tu aproximación anterior, lo más simple es:

$query_email = mysql_query("SELECT EmailACambiar from usuarios WHERE EmailEnCambio > 0 AND $fecha_actual > FinUnixEmail");
$reg_email = mysql_fetch_array($query_email);
$email = $reg_email["EmailACambiar"]; // Acá está la dirección de email
$sql = mysql_query("UPDATE smf_members SET email_address = \"$email\" WHERE member_name in (SELECT Username FROM usuarios WHERE EmailEnCambio > 0 AND $fecha_actual > \"FinUnixEmail\")");

Tu error era solo no darte queta de que _mysqlquery() devuelve un handler a la consulta, y que luego hay que acceder al registro con _mysql_fetcharray() para tener acceso al valor del campo.

Agregué un par de comillas en la consulta, para que los string y las fechas no estén desnudos ;-)

Saludos cordiales.

0voto

Leyes comentado

Gracias Leonardo.

Saludos.

2votos

ankeorum Puntos7230

Haz un procedimiento tal que así:

declare @email as varchar(50);
set @email = select email_nuevo from usuarios where cambiar_email > 0;

luego haz:

UPDATE smf_members SET email_address = @email;

Perdona que no use los mismos nombres que usaste tu pero se entiende supongo.

SaludoS!

0voto

Leyes comentado

Hola @ankeorum, gracias por responder.

Lo hice de tal manera y no surgió efecto, el campo email_address me lo dejó en NULL tras probar varias veces.

Intentá también de esta manera:

$email = mysql_query("SELECT EmailACambiar from usuarios WHERE EmailEnCambio > 0 AND $fecha_actual > FinUnixEmail");
$sql = mysql_query("UPDATE smf_members SET email_address = $email WHERE member_name in (SELECT Username FROM usuarios WHERE EmailEnCambio > 0 AND $fecha_actual > FinUnixEmail)");

E igual, lo pone en NULL (undefined, sin ningún valor, ni 0).

1voto

ankeorum comentado

La sintaxis que estás utilizando es errónea, si estás usando PHP tienes que armar la consulta tal que así:

$email_query = mysql_query("SELECT EmailACambiar from usuarios WHERE EmailEnCambio > 0 AND FinUnixEmail < ".$fecha_actual);
while ($buscar_email = mysql_fetch_array($email_query))
{
    $email = $buscar_email{'EmailACambiar'};
}

$sql = mysql_query("UPDATE smf_members SET email_address = ".$email." WHERE member_name in (SELECT Username FROM usuarios WHERE EmailEnCambio > 0 AND FinUnixEmail < ".$fecha_actual." )");

Cuando haces una consulta SQL esa consulta la lanzas y luego tienes que recorrer el array devuelto para así asignar el valor del array a la variable. Sinceramente no sé si mysql_fetch_array existe ya que yo trabajo con SQL Server y en ese lenguaje es sqlsrv_fetch_array. De todas formas busca un ejemplo de consulta MySQL desde PHP y verás como te sale. Mira aquí

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta