Actualizar varios campos de una tabla en una sola consulta SQL
Respondiendo una duda a Jacky. Por correo me preguntaba como podía actualizar varios campos en una misma consulta con PHP utilizando Mysql para ahorrarse el tener que enviar diferentes consultas a la base de datos y de esa manera lanzar solo una y optimizar la aplicación.
Antes de nada aclarar, que PHP es un lenguaje y MySQL un servidor de base de datos, por lo que la consulta que vamos a implementar es útil para cualquier lenguaje que ataque a dicha base de datos. Es decir, PHP es la herramienta con la que atacamos a esa base de datos, pero la sentencia SQL es propia del lenguaje de la base de datos, en este caso MySQL.
Una vez hecha la aclaración continuemos con la respuesta, que como veréis es muy sencilla la manera de actualizar varios campos en una sola consulta SQL. A diferencia de la consulta simple que sería de esta manera:
UPDATE tabla SET campo = ‘valor’ WHERE condición
Actualizamos utilizando dos valores de esta otra manera
UPDATE tabla SET campo = ‘valor’, campo2 = ‘valor2’ WHERE condición
Así de sencillo, puedes poner tantos campos como quieras siempre y cuando los tenga la tabla, y la condición que quieras poner, si es que no quieres actualizar la tabla completa.
Hay que tener en cuenta que…
Lanzar una consulta en la que se actualicen varios campos a la vez…
Es algo muy común. Se me ocurre que por ejemplo en la actualización de una ficha de usuario, donde se actualice la dirección completa, número, calle, nombre de la misma, CP, etc… todo esto sería actualizar varios campos en una sola consulta SQL, en este caso para actualizar la dirección del usuario.
Espero que os resuelva la duda a más de uno! y que actualizar varios campos en una sola consulta SQL no sea un problema de ahora en adelante.
Un saludo!
Comments
NO SIRVE, a ver si pones bien el título, ¿varios registros a la vez? ¿sabes lo que son los registros en una tabla?
¿El qué no te sirve? 🙂
Tiene razón no sirve, el título debería ser actualizar varios registros, no varios campos.
O no me explico o no me entendéis. Pero donde pone “campo1” y “campo2” ya se actualizan varios campos en una sola consulta SQL, otra cosa es la condición, que puede ser concreta para 1 registro o para varios…
¿Qué intentas hacer? Por si puedo concretarte más.
No sirve, el título es engañoso.
lo que se sugiere con él es actualizar varios registro con una sola sentencia
Yomerenguez, si realizas la siguiente consulta:
UPDATE artículos SET iva = ’18’, dto = ‘5’ WHERE familia = “colchones”
Actualizará todos los registros de la tabla artículos con el iva al 18 y el dto con un 5 donde el campo familia sea igual a colchones, es decir, Actualizar varios campos y registros de una tabla en mysql en una sola consulta es lo que hace la linea de MySQL anterior.
Sino ha resuelto la duda que ibas buscando puedes preguntar y gustosamente te daremos solución.
Un saludo!
Esta claro el titulo “Actualizar varios ====== “CAMPOS” ======= ocea no registros, animo campeon hay que leer detenidamente
y como carajos actualizo 58 registros de 1 sola columna?
La consulta anterior
UPDATE artículos SET iva = ’18′ WHERE familia = “colchones”
Actualizaría 1, 58 o 1000 registros siempre y cuando cumpla la condición de que la familia = “colchones”
Si solo tiene una columna, puedes modificar el where para que sea sobre esa columna u omitirla para que modifique todos los registros, es decir:
Pongamos que tenemos la columna “jaula” y en ella guardamos diferentes animales, gatos, perros y ratones. y queremos que todos los perros sean loros pues sería algo así:
UPDATE animales SET jaula = ’loro′ WHERE jaula = ‘perro’;
En este ejemplo, animales es la tabla, suponemos que tenemos solo la columna jaula y que contiene un string que guarda una especie de animal, entre ellos perro que a partir de la consulta anterior se modificará a loro.
Espero que esté más claro tr.
Un saludo!
Que idiotes, varios registros, no varios CAMPOS! que titulo tan mal puesto
Quizás debieras de repasar términos:
Un registro es un conjunto de campos que contienen los datos que pertenecen a una misma repetición de entidad.
Si lo que buscas es modificar el nombre del campo o columna, o si quieres añadir nuevos campos, también estaría correcto utilizar el término.
Un saludo!
Animo, el javier garcia no tiene ni @#~€ idea, muchas gracias por los tutoriales
Gracias Avispa
Seguiremos formando, así que invitado estás a compartir también tus conocimientos! 🙂
pregunta, similar a la anterior , como se puede actualizar distintos campos si la condicion para cada campo es diferente,
ejemplo
tabla registros
id nombre
1 cualquiera
2 otro diferente
3 distinto a los otros dos
se desea actualizar los nombres, se puede hacer en un solo update?
Si hablamos de diferentes condiciones, como es comprensible, cada WHERE actuará sobre su condición (esto para la clausula UPDATE, DELETE y SELECT) y actualizará todos los campos que cumplan esa condición. Condición que puede incluir varias condiciones por supuesto.
En el caso que expones, se podrían modificar TODOS los nombres sin condición (actualizaría todos los registros) o los que cumplieran el WHERE.
Actualmente no conozco ninguna sentencia que realice lo que estás indicando (al menos en mysql). Si quieres actualizar diferentes registros con diferentes condiciones, tendrás que ejecutar una sentencia para cada actualización.
Os dejo la documentación de MySQL que es el gestor que utilizo:
http://dev.mysql.com/doc/refman/5.0/es/update.html
Si existe en otro lo desconozco, pero si alguien lo sabe, creo que más de uno estaría interesado.
en un inventario como actualizo un registro y rebajo la existencia al mismo tiempo, es posible en mysql ??
Es posible actualizar varios campos de un registro, solo hay que añadir una operación de decremento a uno de ellos.
UPDATE tabla SET campo = ‘valor’, campo2 = campo2 – 1 WHERE condición
Pregunta: tengo una base de datos para una caja de ahorro la cual debo actualizar mensualmente el campo del acumulado ( que parte de la multiplicacion del sueldo del empleado por los meses). el mismo sera diferente para cada afiliado(Por supuesto no todos ganan igual) puedo sumar y sustituir el valor en los campos tomando en cuenta que no todos los afiliados tienen el mismo aporte a la caja de ahorro e logrado actualizar pero el valor que me toma es el mismo para todos los registros de los campos. trabajo con PHP espero entiendas, gracias de antemano.
Me gustaría ayudarte, pero no termino de comprender lo que quieres hacer, expón mejor los campos que tienes en la tabla y lo que quieres lograr.
Un saludo!
bonito el codigo, pero como me sirve para editar a mi gusto un registro de bases de datos por pantalla/pagina web de usuario? ahi veo que solo permite editarlos por medio de codigo, y no de usuario como se requiere en verdad, osea que el codigo no cumple las exigencias requeridas para el titulo del post, porque no da muestra de donde podria editar el usuario, solo el programador.
Creo que la crítica está basada en el desconocimiento.
¿Qué es lo que quieres hacer? Las modificaciones han de ser atacadas desde código, otra cosa es que le pidas los datos entrantes a un usuario (lo normal de una aplicación) y luego realices la modificación desde código.
La magia no existe en el mundo lógico 🙂
Como actualizar los campos de una tabla dependiendo de dos parametros seleccionados de un combo box
Hola Mariza, tal y como expones solo tienes que controlar o por combo.listindex o combo.text y según tengas montar la SQL que ataque a la base de datos.
Un saludo!
Al seleccionar el combo me carga en una grilla los datos que tengo almacenados en la base de datos, a estos los modifico y quiero guardar los cambios, como logro hacerlo si los datos que escojo del combox son dos parámetros unidos y que al cargar la tabla debo validar que guarde sobre los valores de este parametro, después de haberlos convertido en int y char (Ej: 2012 – Agencia)
Si los has unido, tendrás que separarlos, si sabes que están separados por un guión “-” podrás utilizar split
http://www.vertutoriales.com/index.php/split-en-visual-basic-6-vb6-y-explode-en-php/
Una vez tengas el array ya solo se trata de actualizarlos con update
* Parametro:
@AñoAgencia =
SELECT añoAgencia=convert(char(4),a.año) + ‘ – ‘ + b.Agencia_Nombre
from Opita.dbo.AñoAgencia_Calendario a
inner join Opita.Nomina.Agencia b on a.agencia=b.Agencia_Codigo
and a.Laboral_Pago=’L’ and a.diligenciado=0
group by año,Agencia_Nombre
(@AñoAgencia char(30))
* Convert:
declare @Año int
declare @Agencia int
set @Año = convert(int,substring(@AñoAgencia,1,4))
set @Agencia = (select agencia from opita.dbo.AñoAgencia_Calendario
where nombreAgencia=substring(@AñoAgencia,8,(len(@AñoAgencia)-7)))
* Campos De La Tabla:
@Año,@Agencia,Mes,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,Nombre,Fecha_Creacion
¿Como Guardo La Actualizacion Que Se Le Hace En Un Datagridview A Los Campos d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,Nombre,Fecha_Creacion Cuando Sea Seleccionado el parametro @AñoAgencia = ‘2012 – Agencia’ de un combo box.
A ver si lo he entendido bien
Al seleccionar “2012 – Agencia” se actualizan los campos en un datagrid, estos se pueden modificar y quieres que se guarden al pulsar por ejemplo un botón de guardar o en el momento de modificarlo (da igual el evento donde lanzar la operación de guardado) Si es así, solo tendrás que realizar un update de la siguiente manera:
Extraemos primero los datos de año y agencia para insertarlos en la consulta de actualización:
iAño = left$(añoagencia, 4) //para extraer el año
sAgencia = mid$(añoagencia, 7) // para extraer la agencia
UPDATE tabla set d1 = grid1, d2 = grid2, … where Agencia = ” + sAgencia + ” and Año = “+ iAno
A ver si es lo que necesitas. Un saludo!
Si, es eso, Pero No Me Funciona En Visual Studio 2010, Con Lenguaje De Programación Visual Basic.
Gracias Por La Ayuda
¿Qué no te funciona exactamente?
Te recomiendo que hagas un punto de ruptura antes de realizar la operación y traces linea por linea con el debugger para ver lo que hace la apli y localizar el problema.
Un saludo!
Dim ActualizarCalendarioLaboral As String = “Exec Opita.Nomina.Proc_UpdateCalendario @AñoAgencia='” & Me.añoAgencia.ToString & “‘ ”
Dim daActualizarCalendario As New SqlDataAdapter(ActualizarCalendarioLaboral, conexion)
Dim dsActualizarCalendario As New DataSet
daActualizarCalendario.Fill(dsActualizarCalendario)
Dim ActualizarCalendario As String = “UPDATE Opita.Nomina.CalendarioLaboral SET d1 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(3).Value.ToString() & “‘ , d2 ='” & Me.DGV_CalendarioLaboral.Rows(i).Cells(4).Value.ToString() & “‘ , d3 ='” & Me.DGV_CalendarioLaboral.Rows(i).Cells(5).Value.ToString() & “‘ , d4 ='” & Me.DGV_CalendarioLaboral.Rows(i).Cells(6).Value.ToString() & “‘ , d5 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(7).Value.ToString() & “‘ , d6 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(8).Value.ToString() & “‘ , d7 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(9).Value.ToString() & “‘ , d8 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(10).Value.ToString() & “‘ , d9 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(11).Value.ToString() & “‘ , d10 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(12).Value.ToString() & “‘ , d11 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(13).Value.ToString() & “‘ , d12 ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(14).Value.ToString() & “‘ , d13 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(15).Value.ToString() & “‘ , d14 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(16).Value.ToString() & “‘ , d15 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(17).Value.ToString() & “‘ , d16 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(18).Value.ToString() & “‘ , d17 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(19).Value.ToString() & “‘ , d18 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(20).Value.ToString() & “‘ , d19 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(21).Value.ToString() & “‘ , d20 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(22).Value.ToString() & “‘ , d21 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(23).Value.ToString() & “‘ , d22 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(24).Value.ToString() & “‘ , d23 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(25).Value.ToString() & “‘ , d24 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(26).Value.ToString() & “‘ , d25 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(27).Value.ToString() & “‘ , d26 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(28).Value.ToString() & “‘ , d27 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(29).Value.ToString() & “‘ , d28 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(30).Value.ToString() & “‘ , d29 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(31).Value.ToString() & “‘, d30 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(32).Value.ToString() & “‘, d31 = ‘” & Me.DGV_CalendarioLaboral.Rows(i).Cells(33).Value.ToString() & “‘, Nombre = ‘” & Form2.codoperador & “‘, Fecha_Creacion = GetDate() ) FROM Opita.Nomina.TmpCalendarioLaboral WHERE Año = @Año And Agencia = @Agencia”
‘ ListaCalendario.Add(ActualizarCalendario)
mmmm ¿y el problema? 😀
Hay demasiado código para no saber el error que te da 🙂
Jajaja, Q pena contigo!!!
Pues Que No Me Actualiza
🙁
¿Has probado a trazar y ver exactamente la SQL que lanzas?
Con Visual Studio puedes detener el programa en esa linea y ver exactamente la SQL que va a atacar la base de datos. Posiblemente no está realizando bien el Where o no lleva los parámetros que crees que llevan.
System.Data.SqlClient.SqlException was caught
Class=15
ErrorCode=-2146232060
LineNumber=1
Message=Sintaxis incorrecta cerca de ‘L’.
Falta o está vació un nombre de objeto o columna. Compruebe que todas las columnas de las instrucciones SELECT INTO tienen un nombre. Para otras instrucciones, busque si hay nombres de alias vacíos. No se permiten los alias definidos como “” o []. Agregue un nombre o un espacio como nombre de alias.
Comilla no cerrada después de la cadena de caracteres ”.
Number=102
Procedure=””
Server=PASANTEUH-2-PC\PRUEBAS
Source=.Net SqlClient Data Provider
State=1
StackTrace:
en System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
en System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
en System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
en System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
en System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
en System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
en System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
en Opita.CalendarioLaboral.EjecutarTransaccion(ArrayList ListaSentencias) en D:\COONFIE\IngRicardo\Opita\simulador de credito\CalendarioLaboral.vb:línea 224
InnerException:
Está claro que el problema está la consulta SQL, pero la estructura está aparentemente bien, prueba una cosa:
– Crea un punto de interrupción del programa justo donde se asigna la cadena ActualizarCalendario
– Asigna la cadena y saca el valor de ActualizarCalendario y lo pegas por aquí para que veamos que envías a la base de datos.
Sino sabes crear el punto de interrupción: Vete al editor de código, pincha con el ratón en el margen izquierdo de la linea donde está la asignación (debe de aparecer un punto)
Sino lo consigues:
– Crea una caja de texto
– Una vez asignada la variable ActualizarCalendario, asignala a la caja de texto.
– Copia lo que hay en la caja de texto y pegalo por aquí.
Necesito ver lo que se envía a la base de datos.
EN EL PRIMER CICLO:
“UPDATE Opita.Nomina.CalendarioLaboral SET Mes = ‘Enero ‘ , d1 = ‘P’ , d2 =’L’ , d3 =’L’ , d4 =’L’ , d5 = ‘L’ , d6 = ‘L’ , d7 = ‘L’ , d8 = ‘L’ , d9 = ‘L’ , d10 = ‘L’ , d11 = ‘L’ , d12 = ‘L’ , d13 = ‘L’ , d14 = ‘L’ , d15 = ‘L’ , d16 = ‘L’ , d17 = ‘L’ , d18 = ‘L’ , d19 = ‘L’ , d20 = ‘L’ , d21 = ‘L’ , d22 = ‘L’ , d23 = ‘L’ , d24 = ‘L’ , d25 = ‘L’ , d26 = ‘L’ , d27 = ‘L’ , d28 = ‘L’ , d29 = ‘L’, d30 = ‘L’, d31 = ‘L’, Nombre = ”, Fecha_Creacion = GetDate() WHERE @AñoAgencia=’2012 – AGENCIA LA PLATA'”
SEGUNDO CICLO:
“UPDATE Opita.Nomina.CalendarioLaboral SET Mes = ‘Febrero ‘ , d1 = ‘L’ , d2 =’L’ , d3 =’L’ , d4 =’L’ , d5 = ‘L’ , d6 = ‘L’ , d7 = ‘L’ , d8 = ‘L’ , d9 = ‘L’ , d10 = ‘L’ , d11 = ‘L’ , d12 = ‘L’ , d13 = ‘L’ , d14 = ‘L’ , d15 = ‘L’ , d16 = ‘L’ , d17 = ‘L’ , d18 = ‘L’ , d19 = ‘L’ , d20 = ‘L’ , d21 = ‘L’ , d22 = ‘L’ , d23 = ‘L’ , d24 = ‘L’ , d25 = ‘L’ , d26 = ‘L’ , d27 = ‘L’ , d28 = ‘L’ , d29 = ‘L’, d30 = ‘L’, d31 = ‘L’, Nombre = ”, Fecha_Creacion = GetDate() WHERE @AñoAgencia=’2012 – AGENCIA LA PLATA'”
Y ASÍ SUCESIVAMENTE HASTA EL MES DE DICIEMBRE Y TOMANDO LOS VALORES EDITADOS. PERO NO ME ACTUALIZA O GUARDA EN LA TABLA DE LA BASE DE DATOS.
ERROR:
Debe declarar la variable escalar “@AñoAgencia”.
La respuesta está dada más arriba
iAño = left$(añoagencia, 4) //para extraer el año
sAgencia = mid$(añoagencia, 7) // para extraer la agencia
UPDATE tabla set d1 = grid1, d2 = grid2, … where Agencia = ” + sAgencia + ” and Año = “+ iAno
El problema es que estás utilizando una variable de tipo numérico y estás realizando la where con una cadena entera
@AñoAgencia=’2012 – AGENCIA LA PLATA’
Tienes que separar el where con dos variables como está explicado, y pos supuesto utilizar el nombre del campo de año y agencia, @AñoAgencia te da el error por que no existirá en la tabla y menos con @ 🙂
ERROR EN LEFT$:
Error 3 ‘Public Property Left As Integer’ has no parameters and its return type cannot be indexed.
Maritza… ¿conoces las funciones de cadena? ¿Sabes cortar una cadena comenzando desde la izquierda o desde un punto hasta otro?
El código que te he pasado es un ejemplo de como hacerlo, en mi caso estoy utilizando vb aunque muchos comparten el método left y mid, son muy comunes, no sé que lenguaje estás utilizando, pero busca dentro del tuyo propio a realizar esa operación.
Lo que estás haciendo es tomar la cadena “2000 – Agencia” y separarla en año = 2000 y agencia = “Agencia” para poder realizar el WHERE en la base de datos!
Como te digo, la solución está dada, si quieres puedes averiguarlo, si copias y pegas directamente es normal que no te funcione, investiga un poco y no esperes que te lo programen otros, si es eso lo que buscas, creo que tendrías que estudiar otra cosa 😀
Hola, me pidieron que cambiara un campo de texto por un select,para que los usuarios de la web pudieran escoger entre dos opciones, buscando en el codigo medi cuenta de que el valor de ese campo lo daba una variable,la cual lo recogia de una tabla de una base de datos, porlo que aun despues de cambiar para que en vez de verse solo como un simple campo de texto se viera como un select con sus dos respectivas opciones el unico valor que carga es el que la variable recoge por defecto desde la base de datos, realmente no se mucho de php, aqui les pongo como esta el codigo original
public function ocd_list( )
{
$type_m = $this->db->GetSetting( “title”, 0 );
$st = $this->GetGP( “st”, “” );
$message = “”;
if ( $st == “ok” )
{
$message = “Thank you. The settings were successfully updated”;
}
if ( $st == “no” )
{
$message = “Sorry. Fill in all the fields please”;
}
switch ( $type_m )
{
case 1 :
$this->mainTemplate = “./templates/title.tpl”;
$this->pageTitle = “title Settings”;
$this->pageHeader = “title Settings”;
$valor = $this->db->GetOne( “Select valor From `”.$this->object.”` Where matrix_id=’2′ “, 0 );
$valor = “”;
$this->data = array(
“MAIN_ACTION” => $this->pageUrl,
“MAIN_HEADER” => $this->pageHeader,
“MAIN_MESSAGE” => $message,
“EG” => $valor
);
break;
//entre estos dos va otro pedazo pero no tiene nada que ver con lo que quiero //hacer.
public function ocd_update_title( )
{
$valor =””;
$valor = $this->GetValidGP( “valor”, “Valor”, VALIDATE_NUMERIC_POSITIVE );
if ( 0 errors[‘err_count’] )
{
$this->Redirect( $this->pageUrl.”?st=no” );
}
else
{
$this->db->ExecuteSql( “Update `”.$this->object.”` Set valor='{$valor}’ Where matrix_id=2″ );
$this->Redirect( $this->pageUrl.”?st=ok” );
}
}
ese es el original,ahora para que salga en vez de un textfield el select solo cambie el $valor= por $valor=las opciones
se ve como quiero pero al dar clic en submit me dice que debo rellenar todos los campos, este error lo desactive desactivando:
// $valor = $this->GetValidGP( “valor”, “Valor”, VALIDATE_NUMERIC_POSITIVE );
pero de todas formasaunque no de error solo envia el valor que esta en la base de datos, a la cual accedi e inserte otro con el mismo nombre de campo solo que le di matrix_id=’3′, y probe poner
$valor = $this->db->GetOne( “Select valor From `”.$this->object.”` Where matrix_id=’2′ And matrix_id=’3′ “, 0 );
y
$this->db->ExecuteSql( “Update `”.$this->object.”` Set valor='{$valor}’ Where matrix_id=’2′ And matrix_id=’3′ ” );
creo que es en esta ultima parte donde no estoy correcto pues lo que necesito es que en dependencia de la opcion escogida en el select se haga select y update al campo correspondiente a el valor escogido por el usuario, realmente que necesito ideas para ver como resuelvo esto, de antemano gracias…..
Veamos si entendí bien, tienes una tabla con N valores y tienes que cargarlos en un
¿ < select > < /select > ?
Y luego dependiendo del valor que seleccionen en el select realice una operación u otra?
Si es así, un select lo rellenas así:
< select name="subseccion" id="subseccion">< ? php $consulta = mysql_query("SELECT * FROM secciones ORDER BY id"); while ($registro = mysql_fetch_array($consulta)) { ?>< ? php } ? >
< /select>
En este caso estamos viendo diferentes secciones.
Me faltaría la otra parte, pero me gustaría que explicaras un poco mejor qué es lo que necesitas, en vez de poner tanto código 🙂
Que tal gente, les hago una pregunta, en SQL Server 2005, tengo una tabla ALUMNOS con un campo USR que puede tener los valores ‘N’ o ‘S’ y quiero cambiar todos los ‘S’ a ‘N’ , entonces hago:
UPDATE ALUMNOS
SET USR = ‘N’
WHERE USR = ‘S’
y me da el error
Mens 512, Nivel 16, Estado 1, Procedimiento BajaAlumno, Línea 23
La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, , >= o cuando se utiliza como expresión.
Se terminó la instrucción.
Será alguna restricción? Desde ya muchas gracias
Pues nunca me había pasado tal caso, pero como van todos los valores a N, lo más fácil es omitir la condicional WHERE, de manera que quedaría:
UPDATE alumnos SET usr = ‘N’;
Aunque como comentas, debería de dejarte añadir el WHERE con el usr = ‘S’. Pero no sabría darte ninguna solución en este momento. Si ves que no encuentras opciones, coméntamelo y te ayudo a buscar alguna otra solución!
Un saludo!
hola estoy teniendo problemas con la bd de mi web , quisiera que cuando llegue una fecha por ejemplo cuando sea el dia 29 de cada mes se me actualicen los registros automaticamente,pero no me doy cuenta de como hacerlo y hace bastante que vengo renegando con esto,desde ya muchas gracias
Buenas Gustavo
El problema entiendo que no tiene que ver con la base de datos en sí, sino con montar un pequeño script que lance esa consulta en la fecha que le indiques.
Si utilizas linux, podrás utilizar cron, si utilizas Windows podrás utilizar las tareas programadas.
Si explicas más en profundidad lo que necesitas quizás te pueda echar una mano.
Un saludo!
hola alguien podría ayudarme con mi codigo, es para un trabajo escolar de un carrito de comprar, el problema es que, si realizo la compra de un producto con una cantidad de 5 y hay en existencia 10 si lo descuenta pero si compro un 2 producto o 3, ya no me hace los descuentos correspondiente. este es el codigo y agradeceria que me ayudaran >.<
Este es mi codigo:
for($i = 0;$i< $_SESSION['contador'];$i++){
$quitar= $_SESSION['cantidad'][$i];
$peticion = "INSERT INTO lineaspedido VALUES (NULL,'".$_SESSION['idpedido']."','".$_SESSION['producto'][$i]."','$quitar')";
$resultado = mysqli_query($conexion, $peticion);
$peticion = "SELECT * FROM productosreposteria WHERE id='".$_SESSION['producto'][$i]."'";
$resultado = mysqli_query($conexion, $peticion);
while($fila = mysqli_fetch_array($resultado)) {
$existencias = $fila['existencias'];
$peticiondos = "UPDATE productosreposteria SET existencias = '".($existencias-$quitar)."' WHERE id='".$_SESSION['producto'][$i]."'";
$resultadodos = mysqli_query($conexion, $peticiondos);
}
}
Entiendo por tu pregunta, que si tienes menos stock del que en realidad quieres comprar te da algún error? Entiendo que antes de poder realizar la selección del producto a vender, tendrás que comprobar que no se seleccione más de lo que haya en almacén.
Sino entendí bien, puedes reformular la pregunta o exponer el caso práctico de otra forma a ver si comprendo lo que necesitas.
Un saludo!
Aver si me explico mejor, tengo un primer producto con 10 existencias, en el carrito de compra pido 2 de ese producto, luego tengo un segundo producto con 15 existencias, procedo a comprar 10 de ellos, ambos productos los agrega al carrito pero al realizar el descuento en el Stock solo hace el del primer producto y el del segundo lo deja tal cual esta con 15. Espero sea mas claro el problema que trato de explicar
Bastante más claro 😉
Las primeras líneas que añade a lineas de pedido entiendo que va ok. Así que vamos a lo segundo. Simplemente realizamos una consulta UPDATE restando a existencias el valor de $quitar con el WHERE del id de producto que ya teníamos de antes.
for($i = 0;$i< $_SESSION['contador'];$i++){ $quitar= $_SESSION['cantidad'][$i]; $peticion = "INSERT INTO lineaspedido VALUES (NULL,'".$_SESSION['idpedido']."','".$_SESSION['producto'][$i]."','$quitar')"; $resultado = mysqli_query($conexion, $peticion); $peticiondos = "UPDATE productosreposteria SET existencias = existencias - ".$quitar." WHERE id='".$_SESSION['producto'][$i]."'"; $resultadodos = mysqli_query($conexion, $peticiondos); } A ver si así te soluciona 😉
hola pues intente de la manera que me has dicho pero me sigue haciendo el descuento solo del primer producto
Te ayudaría trazar cada una de las variables de SESSION guardadas. En principio el código parece correcto.
¿Las líneas de pedido aparecen bien guardadas con el ID y las existencias?
Suerte!
Pues estaban en inicio de la pagina las variables de SESSION sin embargo igual me ayudaron a verificar el codigo re-escribiendolo pero no funciono optamos por entregar el proyecto asi y eliminar el carrito de compras aun asi gracias por su apoyo
Yo estaba usando “AND” en vez de “,” que lio de cabeza llevaba jaja.
Gracias por la entrada ¡!
De nada, me alegro que te ayude mi consulta 😀
Un saludo!
hola tengo un problemita, es que hice una especie de buscador de academias, la tabla que almacena cada academia tiene un campo llamado “tipo” el cual en un principio manejaba solo 4 tipos de datos, entonces no utilizaba una tabla aparte con los tipos de academia sino que tenia un selector simple en html para guardar el tipo de academia; el asunto es que ahora creé una tabla tipo_academia que posee 2 campos (id,tipo) entonces ahora necesito mandar a actualizar los 70 registros que tengo de prueba con cada uno de los ids de la tabla tipo_academia, pero cuando realizo el update con el select todos los campos tipo se me actualizan con el mismo id (1), como podria hacer para que se me acualicen cada uno con un id_tipo diferente?
lo más “fácil” de entender, sería crear 4 consultas, que modificaran el tipo que tienes en la tabla academia con el de tipoAcademia y que cada consulta fuera correspondiente a uno de esos tipos 🙂
No sé si me expliqué, si me expones un ejemplo con datos será más sencillo de explicar! 🙂
Hola Carlos Dk, gracias por contestar, este es el asunto, yo intente realizar el update asi:
UPDATE academias SET tipo=(SELECT id FROM academia_tipo) WHERE tipo !=0
Pero obviamente con esa consulta me indica un error porque el select esta trayendo mas de un resultado, pero si le indico LIMIT 1, entonces me va a colocar todas las academias tipo 1
la tabla academia_tipo posee (por ahora) 8 registros, los cuales iran en aumento conforme se le vaya agregando mas.
la tabla academias tiene 70 registros de prueba y yo quiciera poder actualizar para q cada uno quede con un tipo diferente, por ej: registros en tabla academia a cada uno le toque tipo 1 o 2 o 3 o 4 o 5 o 6 o 7 o 8
No comprendo en esencia lo que quieres hacer. Explícame de forma “natural” lo que quieres hacer por que no llego a comprenderte.
Lo siento :S
Hola Carlos, buena tarde.. tengo una consulta. A ver si me puedes echar una mano. Necesito actualizar datos de una tabla que esta relacionada a otra, es ejemplo es el siguiente:
De la primera tabla “usuario” tengo los siguientes campos id, nombre, pais
y de la segunda tabla “naciones” tengo id y nombre.
Necesito actualizar el pais de los usuarios, pero de la tabla pais, solo tengo el nombre del pais, no de su id. como puedo realizar esta actualizacion?
intente de varias formas, la ùltima de ella seria algo así:
UPDATE usuarios
SET nombre=’fulanita’, id_pais=”SELECT id FROM paises WHERE nombre=’Mexico'”
WHERE id = 1
pero no me actualiza, me envia el siguiente error: #1452 – Cannot add or update a child row: a foreign key constraint fails (`sist1`.`usuarios`, CONSTRAINT `fknacion5` FOREIGN KEY (`id_nacion_bd`) REFERENCES `naciones` (`id_bd`))
A ver si te entendí, tienes:
Tabla usuarios:
id, nombre, país
Tabla naciones:
id, nombre
Entiendo que en la tabla de usuarios, el campo país es el id de la tabla naciones para poder relacionarlo. El problema es que en vez de saber el id, solo tienes el nombre del país, y tendrías que asignar el id en el usuario. En ese caso, lo más “fácil” sin usar join:
UPDATE usuarios, naciones set pais = naciones.id where usuario.id = 1 and naciones.nombre = “Mexico”
Espero que te sirva y saques la idea 😉
Salud!
Hola Carlos, antes que nada: buena noche (en México ), y muchas gracias por la respuesta. Efectivamente, esa era la situación (aunque realmente eran más datos, pero quiera dejar el ejemplo así para que se entendiera lo mejor posible la situacion) te comento que ese mismo rato encontré otra solución, seria algo así :
UPDATE tabla1 , (SELECT id FROM tabla2 where nombre=’x’) resul1
SET tabla1.campo= resul1.id where tabla1.id=x ;
Tu código se me hace más limpio, lo probaré más adelante cuando me sea de vuelta necesario. Muchas gracias, bendiciones!
Diferentes respuestas para un mismo problema 😉 También estaría la opción de utilizar inner join, y sería lo recomendable, pero sino es mucho volumen de datos, tampoco se nota 😉
Jamás había utilizado la forma que presentas, pero la tendré en cuenta para veces venideras 😉
Gracias por contribuir 😉
UPDATE TABLA
SET CAMPO1 = ‘ASI QUIERO EL CAMBIO’,CAMPO2 =’ASI QUIERO EL CAMBIO’
WHERE PERIODO = ‘ ‘
AND USUARIO = ‘ ‘
AND CAMPO1 = ‘LO QUE QUIERO CAMBIAR’
Por ejemplo 🙂
Estas líneas UPDATE artículos SET iva = ’18’, dto = ‘5’ WHERE familia = «colchones»
son las más sencillas que he encontrado en internet para hacer el cambio que quería.
Actualizar datos de un campo unicamente sobre los datos que tienen una determinada información en otro campo.
Otras web que he buscado eran demasiado técnicas.
En mi caso:
UPDATE tabla SET campoamodificar=’https://www.uncodigopostal.nom.es/espana/index.php’ WHERE Campo=’condicionado=’datocondicionado’
Gracias
Buenas Martín
Esta web tiene una pinta monetización de ads con SEO automático que no puede con ella jejeje
Por cierto, te he actualizado la web de tu ficha, que lo habías escrito mal. al menos que cuente como enlace.
Un saludo!