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!

Carlos Dk

Apasionado por la enseñanza y el SEO

69 comentarios en “Actualizar varios campos de una tabla en una sola consulta SQL

  • el 22 junio, 2011 a las 8:48 pm
    Permalink

    NO SIRVE, a ver si pones bien el título, ¿varios registros a la vez? ¿sabes lo que son los registros en una tabla?

    Respuesta
    • el 23 junio, 2022 a las 3:49 pm
      Permalink

      Tiene razón no sirve, el título debería ser actualizar varios registros, no varios campos.

      Respuesta
      • el 1 agosto, 2022 a las 10:29 am
        Permalink

        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.

        Respuesta
  • el 11 octubre, 2011 a las 9:05 pm
    Permalink

    No sirve, el título es engañoso.
    lo que se sugiere con él es actualizar varios registro con una sola sentencia

    Respuesta
    • el 11 octubre, 2011 a las 9:18 pm
      Permalink

      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!

      Respuesta
    • el 27 mayo, 2022 a las 8:24 pm
      Permalink

      Esta claro el titulo «Actualizar varios ====== «CAMPOS» ======= ocea no registros, animo campeon hay que leer detenidamente

      Respuesta
  • el 19 octubre, 2011 a las 7:30 pm
    Permalink

    y como carajos actualizo 58 registros de 1 sola columna?

    Respuesta
  • el 20 octubre, 2011 a las 2:13 pm
    Permalink

    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!

    Respuesta
  • el 11 mayo, 2012 a las 2:53 pm
    Permalink

    Que idiotes, varios registros, no varios CAMPOS! que titulo tan mal puesto

    Respuesta
    • el 12 mayo, 2012 a las 10:25 am
      Permalink

      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!

      Respuesta
  • el 3 junio, 2012 a las 12:16 pm
    Permalink

    Animo, el javier garcia no tiene ni @#~€ idea, muchas gracias por los tutoriales

    Respuesta
    • el 4 junio, 2012 a las 7:34 pm
      Permalink

      Gracias Avispa

      Seguiremos formando, así que invitado estás a compartir también tus conocimientos! 🙂

      Respuesta
  • el 20 junio, 2012 a las 6:41 pm
    Permalink

    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?

    Respuesta
    • el 20 junio, 2012 a las 8:07 pm
      Permalink

      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.

      Respuesta
  • el 25 julio, 2012 a las 1:30 am
    Permalink

    en un inventario como actualizo un registro y rebajo la existencia al mismo tiempo, es posible en mysql ??

    Respuesta
    • el 25 julio, 2012 a las 7:23 am
      Permalink

      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

      Respuesta
  • el 16 octubre, 2012 a las 8:48 pm
    Permalink

    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.

    Respuesta
    • el 16 octubre, 2012 a las 8:54 pm
      Permalink

      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!

      Respuesta
  • el 23 noviembre, 2012 a las 3:39 pm
    Permalink

    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.

    Respuesta
    • el 25 noviembre, 2012 a las 11:26 am
      Permalink

      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 🙂

      Respuesta
  • el 29 noviembre, 2012 a las 5:21 pm
    Permalink

    Como actualizar los campos de una tabla dependiendo de dos parametros seleccionados de un combo box

    Respuesta
  • el 29 noviembre, 2012 a las 5:47 pm
    Permalink

    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!

    Respuesta
  • el 29 noviembre, 2012 a las 5:58 pm
    Permalink

    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)

    Respuesta
  • el 29 noviembre, 2012 a las 10:32 pm
    Permalink

    * 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.

    Respuesta
    • el 29 noviembre, 2012 a las 10:51 pm
      Permalink

      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!

      Respuesta
  • el 29 noviembre, 2012 a las 11:08 pm
    Permalink

    Si, es eso, Pero No Me Funciona En Visual Studio 2010, Con Lenguaje De Programación Visual Basic.

    Gracias Por La Ayuda

    Respuesta
    • el 30 noviembre, 2012 a las 8:51 am
      Permalink

      ¿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!

      Respuesta
  • el 30 noviembre, 2012 a las 4:59 pm
    Permalink

    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)

    Respuesta
  • el 30 noviembre, 2012 a las 6:08 pm
    Permalink

    Jajaja, Q pena contigo!!!

    Pues Que No Me Actualiza

    🙁

    Respuesta
    • el 30 noviembre, 2012 a las 6:18 pm
      Permalink

      ¿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.

      Respuesta
  • el 30 noviembre, 2012 a las 8:52 pm
    Permalink

    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:

    Respuesta
    • el 1 diciembre, 2012 a las 11:39 am
      Permalink

      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.

      Respuesta
  • el 3 diciembre, 2012 a las 2:31 pm
    Permalink

    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'»

    Respuesta
  • el 3 diciembre, 2012 a las 2:31 pm
    Permalink

    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'»

    Respuesta
  • el 3 diciembre, 2012 a las 2:34 pm
    Permalink

    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.

    Respuesta
  • el 3 diciembre, 2012 a las 2:36 pm
    Permalink

    ERROR:
    Debe declarar la variable escalar «@AñoAgencia».

    Respuesta
    • el 3 diciembre, 2012 a las 2:49 pm
      Permalink

      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 @ 🙂

      Respuesta
  • el 3 diciembre, 2012 a las 8:43 pm
    Permalink

    ERROR EN LEFT$:

    Error 3 ‘Public Property Left As Integer’ has no parameters and its return type cannot be indexed.

    Respuesta
    • el 4 diciembre, 2012 a las 9:14 am
      Permalink

      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 😀

      Respuesta
  • el 12 diciembre, 2012 a las 6:25 pm
    Permalink

    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…..

    Respuesta
    • el 13 diciembre, 2012 a las 9:41 am
      Permalink

      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 🙂

      Respuesta
  • el 17 octubre, 2014 a las 3:26 pm
    Permalink

    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

    Respuesta
    • el 18 octubre, 2014 a las 9:50 am
      Permalink

      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!

      Respuesta
  • el 27 noviembre, 2014 a las 4:43 pm
    Permalink

    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

    Respuesta
    • el 27 noviembre, 2014 a las 8:15 pm
      Permalink

      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!

      Respuesta
  • el 18 febrero, 2015 a las 10:57 pm
    Permalink

    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);
    }
    }

    Respuesta
    • el 23 febrero, 2015 a las 10:03 am
      Permalink

      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!

      Respuesta
      • el 24 febrero, 2015 a las 8:30 pm
        Permalink

        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

        Respuesta
  • el 24 febrero, 2015 a las 8:59 pm
    Permalink

    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 😉

    Respuesta
  • el 28 febrero, 2015 a las 4:18 am
    Permalink

    hola pues intente de la manera que me has dicho pero me sigue haciendo el descuento solo del primer producto

    Respuesta
  • el 28 febrero, 2015 a las 6:41 pm
    Permalink

    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!

    Respuesta
    • el 1 marzo, 2015 a las 7:13 pm
      Permalink

      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

      Respuesta
  • el 19 junio, 2015 a las 11:17 pm
    Permalink

    Yo estaba usando «AND» en vez de «,» que lio de cabeza llevaba jaja.

    Gracias por la entrada ¡!

    Respuesta
  • el 23 abril, 2016 a las 12:30 am
    Permalink

    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?

    Respuesta
    • el 2 mayo, 2016 a las 9:38 pm
      Permalink

      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! 🙂

      Respuesta
      • el 4 mayo, 2016 a las 4:46 pm
        Permalink

        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

        Respuesta
  • el 11 mayo, 2016 a las 10:58 am
    Permalink

    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

    Respuesta
  • el 26 enero, 2017 a las 6:25 pm
    Permalink

    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`))

    Respuesta
    • el 26 enero, 2017 a las 9:05 pm
      Permalink

      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!

      Respuesta
      • el 30 enero, 2017 a las 5:33 am
        Permalink

        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!

        Respuesta
        • el 30 enero, 2017 a las 10:15 pm
          Permalink

          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 😉

          Respuesta
  • el 6 noviembre, 2018 a las 8:42 pm
    Permalink

    UPDATE TABLA
    SET CAMPO1 = ‘ASI QUIERO EL CAMBIO’,CAMPO2 =’ASI QUIERO EL CAMBIO’
    WHERE PERIODO = ‘ ‘
    AND USUARIO = ‘ ‘
    AND CAMPO1 = ‘LO QUE QUIERO CAMBIAR’

    Respuesta
  • el 27 junio, 2021 a las 6:21 pm
    Permalink

    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

    Respuesta
    • el 28 junio, 2021 a las 8:42 am
      Permalink

      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!

      Respuesta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.