Hace unos mins estuve jugando con una consulta en MySQL para poder insertar el orden de la búsqueda :
[sourcecode="sql"]
INSERT INTO Tabla (nombre,fecha,texto,orden) values ('".$nombre."','".$fecha."','".$texto."',(select max(orden)+1 from Tabla))
[/sourcecode]
pero me dió el error:
You can't specify target table 'Tabla' for update in FROM clause
El error se da tanto en count, min, max
La solución simple es hacer un select desde una tabla "falsa" con un alias, mejor dicho en SQL:

[sourcecode="sql"]
INSERT INTO Tabla (nombre,fecha,texto,orden) values ('".$nombre."','".$fecha."','".$texto."',(
select max(orden)+1 from (select * from Tabla) as mi_tabla_falsa)
)
[/sourcecode]
Creo que no es necesario explicar el código, ¿o sí?

{actualización 13/09/2013}

Me cuenta Random que también se puede hacer así:

[sourcecode="sql"]
INSERT INTO Tabla (nombre,fecha,texto,orden) values ('".$nombre."','".$fecha."','".$texto."',(
select max(orden)+1 from Tabla as mi_tabla_falsa)
)

[/sourcecode]

{/actualización 13/09/2013}

Nota Mental: Leer esto cuando tenga el mismo error :B

saludos!

 

 

5 Comments

  • Dnl 23 Diciembre 2009 Responder

    Wena brede !!!!!!!

  • Andy 8 Octubre 2011 Responder

    Buena idea, me ha salvado de tener que hacer dos consultas.

  • xp 16 Mayo 2012 Responder

    Gracias… buena tu solucion 

  • Random 30 Julio 2013 Responder

    Gracias, aunque si le haces el alias a la tabla directo igual funciona 😉
    INSERT INTO Tabla (nombre,fecha,texto,orden) values (‘”.$nombre.”‘,'”.$fecha.”‘,'”.$texto.”‘,(
    select max(orden)+1 from Tabla as mi_tabla_falsa)
    )

    • Brede Basualdo 13 Septiembre 2013 Responder

      muy bueno! de hecho así se puede reducir un poco el consumo de memoria 🙂

Submit your comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.


Notice: ob_end_flush(): failed to send buffer of zlib output compression (0) in /home2/bredecl/public_html/wp-includes/functions.php on line 5107