FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Flitig postare
|
Hej,
Behöver hämta ut alla raderna från en tabell (SELECT * FROM table) och sedan till mitt problem: uppdatera _slumpmässigt_, _30% av raderna_. Någon som har någon idé hur denna query kan se ut i min php-fil. |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Har WN som tidsfördriv
|
Citat:
Finns otaligt många sätt att utföra det på, ett förslag som dök upp i min hjärna innan lunchen hägrar är: 1. Hämta hem radernas ID och släng in i array 2. I PHP slumpar du fram 30% av dessa ID:n m.h.a array-rand() 3. Uppdatera dessa rader i mysql Slumpen i array-rand är säkert inte superhög, men är det inte viktigt med exakt slump fungerar detta bra ![]() |
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Flitig postare
|
Har ca 20 000 rader som jag hämtar från tabellen.
|
|||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Flitig postare
|
Skulle man kunna göra så här måntro?
$sql = mysql_query("SELECT id FROM table WHERE RAND() < 0.3 AND color='green' "); while ($row = mysql_fetch_array($sql)) { mysql_query("UPDATE newtable SET value='new_value' WHERE id='".$row[0]."' "); } |
|||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Mycket flitig postare
|
Jadå. Det där ser ut som något som skulle få jobbet gjort!
|
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
Kanske slippa involvera PHP mer än nödvändigt?
(Otestat men bör fungera i teorin) Kod:
UPDATE newtable, (SELECT id FROM table WHERE Rand() < 0.3) AS randIds SET value = 'newvalue' WHERE newtable.id = randIds.id |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Flitig postare
|
Ett alternativt svar till SvanteH (nästan identiska men ville bara visa en alternativ form):
I en tabell med 2 097 152 rader om du ska sätta samma värde till alla (annars kan du skriva en funktion som uppdaterar de); tar bara några sek så är alla uppdaterade med en query! Men säg att du ta bort 30% slumpmässiga rader och du har en kolumn som heter deleted: Kod:
UPDATE test AS org INNER JOIN (SELECT RAND() AS randNr, test.id FROM test HAVING randNr <= 0.3) AS ra ON org.id = ra.id SET deleted = 1; Fungerar ju på samma sätt såklart. Man kan även använda en switch-sats i queryn; värt att kolla in om du vill lära dig lite mer om det ![]() EDIT: Såg att det var ett lite sent svar så ber om ursäkt för det. Testa även att skriva explain före queryn så kan du jämföra olika typer av frågesatser. Senast redigerad av x264 den 2016-04-30 klockan 19:38 |
||
![]() |
![]() |
Svara |
|
|