php.lv forumi: mysql update - php.lv forumi

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

mysql update

#1 User is offline   sidrs 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 12
  • Joined: 2010.03.06

Posted 2010.03.06 22:21

sveiki!
vaidzētu padomu, kādā veidā iespējams updeitot useru tabulā (piemēram 5 useriem) katram random skaitli (lai katram būtu savādāks nevis visi vienādi),vienā lapas ielādē.
vai ir kādi varianti?

#2 User is offline   waplet 

  • ehh waplet's jau pasteidzas
  • PipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 1,234
  • Joined: 2007.01.04

Posted 2010.03.06 22:28

ar ciklu
Челябинские хакеры настолько суровы, что вместо того, чтобы запомнить пароль от почты, каждый раз ломают ее, чтобы зайти.

http://twitter.com/waplet

#3 User is offline   briedis 

  • Sawļe
  • PipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 1,862
  • Joined: 2005.01.15

Posted 2010.03.06 22:34

atlasa masīvā visus lietotāju id
Tad iet cauri masīvam un veic update kvērijus katram lietotājam uzstādot random skaitli...

Tik tā būs relatīvi laikietilpīga darbība, to nevajadzētu veikt parāk bieži...
Neturi zināšanas zem pūra!

#4 User is offline   Gints Plivna 

  • SQL guru
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 300
  • Joined: 2007.09.27

Posted 2010.03.06 23:04

hmmm kāpēc ciklu?
Man būs 4 useri ar idiem 1, 2, 3, 4 vienā piegājienā laboju 2 un 4.

mysql> create table users (id integer, rnd integer);
Query OK, 0 rows affected (0.16 sec)

mysql> insert into users values (1, null);
Query OK, 1 row affected (0.03 sec)

mysql> insert into users values (2, null);
Query OK, 1 row affected (0.03 sec)

mysql> insert into users values (3, null);
Query OK, 1 row affected (0.05 sec)

mysql> insert into users values (4, null);
Query OK, 1 row affected (0.03 sec)

mysql> update users set rnd = rand()*10000
    -> where id in (2, 4);
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from users;
+------+------+
| id   | rnd  |
+------+------+
|    1 | NULL |
|    2 |  841 |
|    3 | NULL |
|    4 | 7387 |
+------+------+
4 rows in set (0.00 sec)


Gints Plivna
http://datubazes.wordpress.com/

#5 User is offline   chizijs 

  • čizijs
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 170
  • Joined: 2010.02.13

Posted 2010.03.06 23:23

$rand1 = rand(1,5);
$rand2 = rand(1,5);
$rand3 = rand(1,5);
$rand4 = rand(1,5);
$rand5 = rand(1,5);
mysql_query("UPDATE users SET rand_skaitlis = '".mysql_real_escape_string($rand1)."' WHERE id = '".mysql_real_escape_string($rand1)."'") or die(mysql_error());
mysql_query("UPDATE users SET rand_skaitlis = '".mysql_real_escape_string($rand2)."' WHERE id = '".mysql_real_escape_string($rand2)."'") or die(mysql_error());
mysql_query("UPDATE users SET rand_skaitlis = '".mysql_real_escape_string($rand3)."' WHERE id = '".mysql_real_escape_string($rand3)."'") or die(mysql_error());
mysql_query("UPDATE users SET rand_skaitlis = '".mysql_real_escape_string($rand4)."' WHERE id = '".mysql_real_escape_string($rand4)."'") or die(mysql_error());
mysql_query("UPDATE users SET rand_skaitlis = '".mysql_real_escape_string($rand5)."' WHERE id = '".mysql_real_escape_string($rand5)."'") or die(mysql_error());


#6 User is offline   2easy 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 2,006
  • Joined: 2009.10.02

Posted 2010.03.07 08:19

njaa chizij, no kura laika skaitļus liek pēdiņās un vēl eskeipo ar mysql_real_escape_string()??? :D:D:D


Gints Plivna +1
taču ja pieciem useriem vajag updeitot 5 nelielus random skaitļus, teiksim 1..5, tad jau gan nāksies rakstīt ar php 5 kverijus turklāt ņemt secīgus skaitļus ārā no masīva ar array_rand(), jo pie tik maza random skaitļu intervāla ir liela varbūtītba, ka tie atkārtosies

piemēram, pēc chizija (latviski laikam būtu "sieriņš", ja tas ir latviskots angļu cheese?) varianta man nupat sanāca 2, 4, 4, 4, 4 (labi, ka neatkārtojas :D:D:D)

This post has been edited by 2easy: 2010.03.07 08:23


#7 User is offline   Gints Plivna 

  • SQL guru
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 300
  • Joined: 2007.09.27

Posted 2010.03.07 11:03

View Post2easy, on 2010.03.07 08:19, said:

taču ja pieciem useriem vajag updeitot 5 nelielus random skaitļus, teiksim 1..5, tad jau gan nāksies rakstīt ar php 5 kverijus turklāt ņemt secīgus skaitļus ārā no masīva ar array_rand(), jo pie tik maza random skaitļu intervāla ir liela varbūtītba, ka tie atkārtosies


Think out of the box (php) :P

Lietojam to pašu tabulu users.
Taisu updeitu 2 reizes arī atlasot datus, lai pierādītu, ka ir random (cik nu labs ir random ģenerētājs mysqlā iebūvēts) un rezultāti nesakrīt.
mysql> set @i = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> update users set rnd = (@i := @i + 1)
    -> order by rand();
Query OK, 4 rows affected (0.03 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from users;
+------+------+
| id   | rnd  |
+------+------+
|    1 |    3 |
|    2 |    1 |
|    3 |    2 |
|    4 |    4 |
+------+------+
4 rows in set (0.00 sec)

mysql> set @i = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> update users set rnd = (@i := @i + 1)
    -> order by rand();
Query OK, 4 rows affected (0.03 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from users;
+------+------+
| id   | rnd  |
+------+------+
|    1 |    1 |
|    2 |    4 |
|    3 |    3 |
|    4 |    2 |
+------+------+
4 rows in set (0.00 sec)


Gints Plivna
http://datubazes.wordpress.com

#8 User is offline   2easy 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 2,006
  • Joined: 2009.10.02

Posted 2010.03.07 11:39

Gints Plivna +1000 :))
oo šis ir smuks mysql variabļu pielietojums!!! turklāt vēl tādā kombinācijā ar ORDER BY RAND()
vnk woooow

good job! ;)

P.S.
protams, ir smuki, ka šāds daudzu rindu update ir noslēpts vienā kverijā, taču tehniski no performances viedokļa tas varētu būt tikai nedaudz ātrāk kā pēc indeksēta id apdeitot katru useri atsevišķi. bet risinājums anyway ir loti elegants!

#9 User is offline   sidrs 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 12
  • Joined: 2010.03.06

Posted 2010.03.07 15:27

Esu iesacējs un daudzkas ir tumša bilde :)
bet nu kautko sagrābstot piespiedu updeitot katram random ciparu,tik nezinu cik tas ir pareizi :)

	
$result = mysql_query("SELECT id FROM users where atlase='1'");
    while ($row = mysql_fetch_row($result))
    {
	$user1=$row[0];
	$user2=$row[1];
	$user3=$row[2];
	$user4=$row[3];
	$user5=$row[4];
	$user6=$row[5];
	
	 $rand1=rand(1,100);
	 $rand2=rand(1,100);
	 $rand3=rand(1,100);
	 $rand4=rand(1,100);
	 $rand5=rand(1,100);
	 $rand6=rand(1,100);
	 
         mysql_query("UPDATE users SET aile=$rand1 WHERE id='$user1'");
	 mysql_query("UPDATE users SET aile=$rand2 WHERE id='$user2'");
	 mysql_query("UPDATE users SET aile=$rand3 WHERE id='$user3'");
	 mysql_query("UPDATE users SET aile=$rand4 WHERE id='$user4'");
	 mysql_query("UPDATE users SET aile=$rand5 WHERE id='$user5'");
	 mysql_query("UPDATE users SET aile=$rand6 WHERE id='$user6'");
}


kritiku studijā :D

#10 User is offline   waplet 

  • ehh waplet's jau pasteidzas
  • PipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 1,234
  • Joined: 2007.01.04

Posted 2010.03.07 16:33

es saku, ka neies.
Челябинские хакеры настолько суровы, что вместо того, чтобы запомнить пароль от почты, каждый раз ломают ее, чтобы зайти.

http://twitter.com/waplet

#11 User is offline   briedis 

  • Sawļe
  • PipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 1,862
  • Joined: 2005.01.15

Posted 2010.03.07 16:35

View Postwaplet, on 2010.03.07 16:33, said:

es saku, ka neies.


Moš viņam users tabulas struktūra ir ar kolonnām:
id | id2 | id3 | id4 | id5 | id6 | aile | atlase

Ko tad teiksi? :)

This post has been edited by briedis: 2010.03.07 16:35

Neturi zināšanas zem pūra!

#12 User is offline   waplet 

  • ehh waplet's jau pasteidzas
  • PipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 1,234
  • Joined: 2007.01.04

Posted 2010.03.07 16:38

nu labi pieņemsim.. viņš 6 useriem pa 6 reizēm samainīš id
Челябинские хакеры настолько суровы, что вместо того, чтобы запомнить пароль от почты, каждый раз ломают ее, чтобы зайти.

http://twitter.com/waplet

#13 User is offline   briedis 

  • Sawļe
  • PipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 1,862
  • Joined: 2005.01.15

Posted 2010.03.07 16:52

View Postwaplet, on 2010.03.07 16:38, said:

nu labi pieņemsim.. viņš 6 useriem pa 6 reizēm samainīš id


Nu jā, tas, protams, būs neloģiski, bet strādāt ta strādās :)
Neturi zināšanas zem pūra!

#14 User is offline   sidrs 

  • Māceklis
  • Pip
  • Group: Reģistrētie lietotāji
  • Posts: 12
  • Joined: 2010.03.06

Posted 2010.03.07 16:54

cik sapratu tad šitie nosaka kads userim id

        $user1=$row[0];
        $user2=$row[1];
        $user3=$row[2];
        $user4=$row[3];
        $user5=$row[4];
        $user6=$row[5];


un tad pec id liek random skaitļus iekša..

id kolona ir viena un tur nekas nav mainijies un skaitli aile ielikas katram cits..

#15 User is offline   briedis 

  • Sawļe
  • PipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 1,862
  • Joined: 2005.01.15

Posted 2010.03.07 17:04

View Postsidrs, on 2010.03.07 16:54, said:

cik sapratu tad šitie nosaka kads userim id

        $user1=$row[0];
        $user2=$row[1];
        $user3=$row[2];
        $user4=$row[3];
        $user5=$row[4];
        $user6=$row[5];


un tad pec id liek random skaitļus iekša..

id kolona ir viena un tur nekas nav mainijies un skaitli aile ielikas katram cits..


Bet ar mysql_fetch_row tu tak nolasi VIENU ierakstu, nevis veselus 6...

Varbūt labāk izmanot mysql_fetch_assoc, būs skaidrāka padarīšana

while($row = mysql_fetch_assoc($data){
 $user_id  = $row['id'];
 //...
}

Neturi zināšanas zem pūra!

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic