elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [sql] Sacar y modificar varias filas de una columna a la vez?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [sql] Sacar y modificar varias filas de una columna a la vez?  (Leído 7,228 veces)
Servia


Desconectado Desconectado

Mensajes: 347


Ver Perfil
[sql] Sacar y modificar varias filas de una columna a la vez?
« en: 12 Abril 2009, 12:38 pm »

He leido varios tutoriales para por lo menos saber como sacar en una misma consulta unas cuantas filas que necesitaba, el problema esque no se como modificarlas en la misma consulta ya que el metodo usado para conseguirlas es LIKE 'jugador%' .

Expongo:

Tabla: jugadores
Columnas: ID y nick

La id siempre es jugador + un numero que va aumentando. jugador1,jugador2,jugador3,etc..

Para sacar el nick de estos jugadores lo he hecho asi:
Código
  1. $sql=mysql_query("SELECT * FROM jugadores WHERE id LIKE 'jugador%' ORDER BY id ASC");

Pero para actualizarlos no puedo poner el like ya que no controlaria correctamente si el nick del jugador1 se pone en el jugador1 o en el 2 o en el que quiera, aparte de que dudo que se pueda usar. O si que puede funcionar añadiendo tambien la linea de ORDER BY id ASC de modo que se inserte por orden?
Código
  1. $sql="UPDATE jugadores SET ... WHERE id LIKE 'jugador%'";

Aún estoy buscando tutoriales ya que el que he usado sólo es para mostrar los datos de todas las posibilidades posibles.


« Última modificación: 12 Abril 2009, 12:39 pm por Servia » En línea

XafiloX

Desconectado Desconectado

Mensajes: 130


Ver Perfil
Re: [sql] Sacar y modificar varias filas de una columna a la vez?
« Respuesta #1 en: 12 Abril 2009, 17:36 pm »

Si lo que quieres hacer es actualizarle a cada uno un dato diferente, lo que estas diciendo creo que es imposible, aunque a lo mejor lo podrias conseguir por medio de procedimientos: http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html

Si lo que quieres hacer es insertarles a todos el mismo dato, solo tienes que hacer:
Código
  1. $sql="UPDATE jugadores SET ... '";
...No tendrias que  usar el WHERE a no ser que haya IDs que no quieras actualizar...


En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: [sql] Sacar y modificar varias filas de una columna a la vez?
« Respuesta #2 en: 12 Abril 2009, 20:20 pm »

Voy a suponer que quieres actualizar todos los jugadores en una consulta. Suponte que el registro que quieres actualizar de la tabla jugadores es el campo nombres....

Pues generas en tu codigo una consulta que obtenga todos los nombres de los jugadores y guardas el resultado en una variable arreglo.

Código
  1.  SELECT NOMBRES FROM JUGADORES WHERE ID = JUGADOR%

Ahora te preguntaras porque opte por utilizar el operador igual ( = ) y no LIKE, por la siguiente razon... mi intencion es optimizar la consulta SQL si mi predicado es una constante le sera mas sencillo a la base de datos ir exactamente al grano del asunto, pero si uso LIKE a la base de datos tendra que indagar toda la data y todos los indices antes de llegar a su objetivo... y esto es algo mediocre con el desenvolvimiento, si es con 100 o 1,000 o 5,000 registros la diferencia no es grande pero si hablamos de miles o millones ... mejor ve optimizando el codigo desde el inicio asi te evitas problemas futuros recuerda MySQL adora la RAM, Ahora para responder a tu duda sobre si utilizo el operador igual y no LIKE como vas a obtener los registros?  ya que tus id van en un rango numerico creciente jugador1, jugador2, jugador3 ... etc.. y con LIKE obtienes todos a la vez pero con el operador igual no.. al menos que el ID sea siempre una constante. He aqui donde entra la programacion, haras un bucle FOR.. LOOP

Código
  1.  
  2. for ($numero = 0; $numero <= 10; $numero++) {
  3.  
  4. $sql = mysql_query("[code=sql]  SELECT NOMBRES FROM JUGADORES WHERE ID = JUGADOR[numero]
", $conexión);

}
[/code]

Cuando obtienes el listado de los nombres de los jugadores por ejemplo, lo guardas todos en una variable normal, no se como se haga en PHP para el valor que contiene X variable guardarla en un arreglo creo que es con la funcion explode o implode... pero no se bien. Ya dividido los resultados en una variable arreglo podrias actualizar todos los campos requeridos por ejemplo asi :

Código
  1.  
  2. foreach (@areglo) {
  3.  
  4. mysql_query("UPDATE JUGADORES SET.... WHERE NOMBRES = $arreglo", $conexión)
  5.  
  6.  
  7. }
  8.  

En línea

sempus
Dakishimetai no ni...
Colaborador
***
Desconectado Desconectado

Mensajes: 2.391


GJDAM 愛している


Ver Perfil
Re: [sql] Sacar y modificar varias filas de una columna a la vez?
« Respuesta #3 en: 14 Abril 2009, 03:47 am »

Servia, hay varias formas de hacerlo, la que tu mencionas es una de ellas (a mi si me funciona, cree la tabla solo para probar y el UPDATE me funciona sin problemas.)

Tambien probe la que menciona XafiloX que es bastante logica y tambien funciona, la de ^TiFa^ no la pruebo porque si viene de ella estoy seguro que tambien funciona, y cree una mia que tambien lo hace xD


Código
  1. UPDATE jugadores SET nombre="Prueba-Actualizado" WHERE id IN (SELECT id FROM jugar WHERE id LIKE "jugador%")

ya tienes tres opciones ;)

salu2
En línea

...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE
Servia


Desconectado Desconectado

Mensajes: 347


Ver Perfil
Re: [sql] Sacar y modificar varias filas de una columna a la vez?
« Respuesta #4 en: 15 Abril 2009, 18:03 pm »

Muchas gracias, me funcionó perfectamente ^^

Pues a mi no me iba bien la que yo comenté.
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: [sql] Sacar y modificar varias filas de una columna a la vez?
« Respuesta #5 en: 16 Abril 2009, 16:53 pm »

En perl que es el lenguaje scripting que mas comprendo, lo hice justo como le sugeri al amigo y funciona.

Código
  1.  
  2. our $consulta;
  3.  
  4. my @nombres = (" ", "Juan", "Juana", "Pepe", "Carlos");
  5.  
  6. my $conexión = DBI->connect("dbi:mysql:primaria", "marian", "123", {
  7. RaiseError => 0, PrintError => 0}) or die "No me puedo Conectar :( \n";
  8.  
  9.  
  10.  
  11. for ( my $numero = 0; $numero < 5; ++$numero ) {
  12.  
  13. $consulta = $conexión->prepare( qq{ SELECT * FROM jugadores WHERE id =
  14. $numero }) or warn DBI::errstr;
  15. $consulta->execute();
  16.  
  17. while ( my $todo = $consulta->fetchrow_hashref) {
  18.  
  19. foreach (@nombres) {
  20.  
  21. my $consulta2 = $conexión->prepare( qq{ UPDATE jugadores SET
  22. nombres = '$nombres[$numero]' WHERE id = $todo->{id}} ) or
  23. warn DBI::errstr;
  24. $consulta2->execute() or warn DBI::errstr;
  25.  
  26. $consulta2->finish();
  27. }
  28.  
  29.  
  30. }
  31. $consulta->finish();
  32.  
  33. }
  34.  
  35.  
  36. $conexión->disconnect();
  37.  
  38.  
  39.  


Y no porque lo diga yo indica que funcione 100% :)
En línea

Servia


Desconectado Desconectado

Mensajes: 347


Ver Perfil
Re: [sql] Sacar y modificar varias filas de una columna a la vez?
« Respuesta #6 en: 20 Abril 2009, 22:11 pm »

Perl buf pues desconzco totalmente este lenguaje.
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: [sql] Sacar y modificar varias filas de una columna a la vez?
« Respuesta #7 en: 21 Abril 2009, 03:13 am »

Coloque el ejemplo pensando que era interpretable para moverlo  a otro lenguaje que conozcas por ejemplo...

Mas o menos en PHP la traduccion de lo que hice seria asi :

Código
  1.  
  2. $servidor = 'localhost';
  3. $usuario = 'usuario';
  4. $contrasena = 'password';
  5. $db = 'basesita';
  6.  
  7. $nombres = array("Juana", "Juan", "Pedro", "Pepin");
  8.  
  9. $conexión = mysql_connect($servidor, $usuario, $contrasena) or die("Error con la conexión\n");
  10. mysql_select_db($db,$conexión) or die("Problemas con la Base Datos\n");
  11.  
  12. $consulta = mysql_query("SELECT * FROM jugadores", $conexión);
  13.  
  14.  
  15. for ($numero = 0; $numero < mysql_num_rows($consulta); $numero++) {
  16.  
  17. $consulta1 = mysql_query("SELECT * FROM jugadores WHERE id = $numero", $conexión);
  18.  
  19. while ($registros = mysql_fetch_array($consulta1)) {
  20.  
  21. foreach ($nombres as $nombrecitos) {
  22.  
  23. $consulta2 = mysql_query("UPDATE jugadores SET nombres = $nombrecitos WHERE id = $registros['id']", $conexión) or die(mysql_error());
  24.  
  25.  
  26. mysql_free_result($consulta2);
  27. }
  28.  
  29. }
  30. mysql_free_result($consulta1);
  31.  
  32. }
  33.  
  34. mysql_free_result($consulta);
  35.  
  36.  
  37.  

Pero es un mas o menos... no se si funcione, no soy muy agil con PHP. Pero se deberia entender el ejemplo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
modificar colores de filas de una jtable
Java
josco 0 2,426 Último mensaje 8 Marzo 2012, 02:08 am
por josco
F1 - Modificar columna de DataGridView con código
.NET (C#, VB.NET, ASP)
Maurice_Lupin 2 3,207 Último mensaje 11 Marzo 2012, 04:37 am
por Maurice_Lupin
Problemas al sacar mi WEP, intentadas varias técnicas « 1 2 »
Wireless en Linux
ctcx 16 8,490 Último mensaje 21 Abril 2012, 07:19 am
por ctcx
Asignar nombre filas y columna matrices
Java
miguel96 2 3,149 Último mensaje 21 Noviembre 2014, 17:57 pm
por DarK_FirefoX
SCRIPTS - - BUSCAR.SH - SACAR.SH - MODIFICAR.SH - LISTAR.SH - ALTA.SH
Scripting
Anonymous09 2 743 Último mensaje 16 Enero 2019, 18:35 pm
por **Aincrad**
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines