Kom ihåg mig?
Home Menu

Menu


MySQL query

Ämnesverktyg Visningsalternativ
Oläst 2016-03-31, 11:22 #1
niklas_SWEDs avatar
niklas_SWED niklas_SWED är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2011
Inlägg: 400
niklas_SWED niklas_SWED är inte uppkopplad
Flitig postare
niklas_SWEDs avatar
 
Reg.datum: Jan 2011
Inlägg: 400
Standard MySQL query

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.
niklas_SWED är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-03-31, 11:36 #2
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
Citat:
Ursprungligen postat av niklas_SWED Visa inlägg
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.
Är det många rader?

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
nosnaj är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-03-31, 12:01 #3
niklas_SWEDs avatar
niklas_SWED niklas_SWED är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2011
Inlägg: 400
niklas_SWED niklas_SWED är inte uppkopplad
Flitig postare
niklas_SWEDs avatar
 
Reg.datum: Jan 2011
Inlägg: 400
Har ca 20 000 rader som jag hämtar från tabellen.
niklas_SWED är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-03-31, 12:43 #4
niklas_SWEDs avatar
niklas_SWED niklas_SWED är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2011
Inlägg: 400
niklas_SWED niklas_SWED är inte uppkopplad
Flitig postare
niklas_SWEDs avatar
 
Reg.datum: Jan 2011
Inlägg: 400
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]."' ");

}
niklas_SWED är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-03-31, 21:27 #5
Kimppas avatar
Kimppa Kimppa är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2010
Inlägg: 793
Kimppa Kimppa är inte uppkopplad
Mycket flitig postare
Kimppas avatar
 
Reg.datum: Jul 2010
Inlägg: 793
Citat:
Ursprungligen postat av niklas_SWED Visa inlägg
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]."' ");

}
Jadå. Det där ser ut som något som skulle få jobbet gjort!
Kimppa är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-04-01, 12:31 #6
SvanteH SvanteH är inte uppkopplad
Medlem
 
Reg.datum: Jan 2015
Inlägg: 118
SvanteH SvanteH är inte uppkopplad
Medlem
 
Reg.datum: Jan 2015
Inlägg: 118
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
SvanteH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-04-30, 19:23 #7
x264 x264 är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2013
Inlägg: 342
x264 x264 är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2013
Inlägg: 342
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;
Detta är bara för att visa att man kan lägga in nya "columner" i svaret i select-satsen.

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
x264 är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 19:02.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017