Autor
|
Tema: [sql] Sacar y modificar varias filas de una columna a la vez? (Leído 8,262 veces)
|
Servia
Desconectado
Mensajes: 346
|
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: $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? $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
Mensajes: 130
|
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.htmlSi lo que quieres hacer es insertarles a todos el mismo dato, solo tienes que hacer: $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
Mensajes: 2.804
|
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. 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 for ($numero = 0; $numero <= 10; $numero++) { $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 : foreach (@areglo) { mysql_query("UPDATE JUGADORES SET.... WHERE NOMBRES = $arreglo", $conexión ) }
|
|
|
En línea
|
|
|
|
sempus
Dakishimetai no ni...
Colaborador
Desconectado
Mensajes: 2.391
GJDAM 愛している
|
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 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
Mensajes: 346
|
Muchas gracias, me funcionó perfectamente ^^
Pues a mi no me iba bien la que yo comenté.
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
En perl que es el lenguaje scripting que mas comprendo, lo hice justo como le sugeri al amigo y funciona. our $consulta; my @nombres = (" ", "Juan", "Juana", "Pepe", "Carlos"); my $conexión = DBI->connect("dbi:mysql:primaria", "marian", "123", { RaiseError => 0, PrintError => 0}) or die "No me puedo Conectar :( \n"; for ( my $numero = 0; $numero < 5; ++$numero ) { $consulta = $conexión ->prepare( qq{ SELECT * FROM jugadores WHERE id = $numero }) or warn DBI ::errstr; $consulta->execute(); while ( my $todo = $consulta->fetchrow_hashref) { foreach (@nombres) { my $consulta2 = $conexión ->prepare( qq{ UPDATE jugadores SET nombres = '$nombres[$numero]' WHERE id = $todo->{id}} ) or $consulta2->execute() or warn DBI ::errstr; $consulta2->finish(); } } $consulta->finish(); } $conexión->disconnect();
Y no porque lo diga yo indica que funcione 100%
|
|
|
En línea
|
|
|
|
Servia
Desconectado
Mensajes: 346
|
Perl buf pues desconzco totalmente este lenguaje.
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
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 : $servidor = 'localhost'; $usuario = 'usuario'; $contrasena = 'password'; $db = 'basesita'; $nombres = array("Juana", "Juan", "Pedro", "Pepin"); $conexión = mysql_connect($servidor, $usuario, $contrasena) or die("Error con la conexión\n"); $consulta = mysql_query("SELECT * FROM jugadores", $conexión ); $consulta1 = mysql_query("SELECT * FROM jugadores WHERE id = $numero", $conexión ); foreach ($nombres as $nombrecitos) { $consulta2 = mysql_query("UPDATE jugadores SET nombres = $nombrecitos WHERE id = $registros['id']", $conexión ) or die(mysql_error()); } } }
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
modificar colores de filas de una jtable
Java
|
josco
|
0
|
3,142
|
8 Marzo 2012, 02:08 am
por josco
|
|
|
F1 - Modificar columna de DataGridView con código
.NET (C#, VB.NET, ASP)
|
Maurice_Lupin
|
2
|
4,449
|
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
|
10,216
|
21 Abril 2012, 07:19 am
por ctcx
|
|
|
Asignar nombre filas y columna matrices
Java
|
miguel96
|
2
|
4,381
|
21 Noviembre 2014, 17:57 pm
por DarK_FirefoX
|
|
|
SCRIPTS - - BUSCAR.SH - SACAR.SH - MODIFICAR.SH - LISTAR.SH - ALTA.SH
Scripting
|
Anonymous09
|
2
|
1,863
|
16 Enero 2019, 18:35 pm
por **Aincrad**
|
|