[php] Query verlichten

Pagina: 1
Acties:

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 05-09 00:34

BierPul

2 koffie graag

Topicstarter
Ik moet 28000 email adressen matchen op een bestand van 100.000 +

Ik heb hier nu een scrippie voor gewschreven maar vraag me af of het niet wat efficienter kan.
PHP:
1
<?set_time_limit(0);//Connectie naar de DBmysql_connect('localhost', '********', '*******') or die ("Tot onze spijt kunnen we geen verbinding maken naar de database, probeert U het zo nog eens");mysql_select_db('backoffice');$temp_qry = mysql_query("SELECT email FROM temp");WHILE($temp_array = mysql_fetch_array($temp_qry)) {         $check_email = chop($temp_array['email']);         $check_qry = mysql_query("SELECT ml_email, ml_mask FROM tbl_mailinglist WHERE ml_email = '$check_email'");         $num_output = mysql_num_rows($check_qry);if($num_output > '0') {mysql_query("UPDATE tbl_mailinglist SET ml_mask = $check_mask+4 WHERE ml_email = $check_mail");         } else {mysql_query("INSERT into tbl_mailinglist (ml_email, ml_mask) values ('$check_email','4')");}/*Beetje slordig but keeps the browser alive*/echo(" ");flush();} /*end of while*/echo("klaar");?>

Iemand suggesties :?

Ja man


  • Grum
  • Registratie: Juni 2001
  • Niet online
ik zou eventjes wat info gaan lezen over joins in sql :)

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Als ik de bedoeling goed begrijp uit je code is dat als volgt..

- Voeg alle adressen van 'temp' aan 'tbl_mailinglist' toe. (update als reeds bestaand record)
- Tel 4 op bij alle ml_mask velden.

oftewel in queries :
code:
1
2
REPLACE INTO tbl_mailinglist (ml_email) SELECT email AS ml_email FROM temp
UPDATE tbl_mailinglist SET ml_mask = ml_mask + 4

Volgens mij moet je dan klaar zijn.

Voorwaarde is wel dat ml_mask een standaardwaarde van 0 heeft, en dat op ml_email een unieke index staat.


Lees meer over REPLACE INTO, hier

SIZE does matter.
"You're go at throttle up!"


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 05-09 00:34

BierPul

2 koffie graag

Topicstarter
Het moet wel zo zijn dat

Het nieuwe veld geupdate wordt.

Het is niet altijd zo dat ml_mask 0 is.

het kan ook heel goed ml_mask 8 is en dat zou dan 12 moeten worden :)

Als ik de manual goed begrijp wordt er eigenlijk een geheel nieuw record aangemaakt vandaar ook dat "omslachtige" script

Ik heb namelijk verschillende groepen onder gebracht in bits

groep 1 = 1
groep 2 = 2
groep 3 = 4

etc etc

Het gaat er dus om dat mensen bij meerdere groepen kunnen staan en dan niet keihard bij 1 groep geknald worden :)

Ja man


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Toch lijkt me een simpele sql cursus handig. Waneer het eail veld uniek is kun je zo die 2e select (die in de while lijst wordt uitgevoerd) weghalen. Zelfs als dat niet het geval is, is het ook wel eens handig om bv naar COUNT te kijken ipv mysql_num_rows().

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Het moet wel zo zijn dat

Het nieuwe veld geupdate wordt.

Het is niet altijd zo dat ml_mask 0 is.

het kan ook heel goed ml_mask 8 is en dat zou dan 12 moeten worden :)
Dat gebeurd ook.. Bestaat een emailadres, dan gebeurd er eigenlijk niets tijdens de 1e query.

De tweede query zorgt ervoor dat er 4 bij de reeds aanwezige waarde wordt opgeteld.

SIZE does matter.
"You're go at throttle up!"


  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 04-09 16:26
Misschien ook handiger om ipv iedere keer los een INSERT te doen dit als een grote insert query te doen. Gaat dan wel een stukje vlotter. Update moet je overigens wel iedere keer los doen.
Pagina: 1