Avatar billede Slettet bruger
08. marts 2007 - 12:33 Der er 9 kommentarer og
1 løsning

php/mysql LIMIT

Hej...
Jeg sider og laver et php/mysql script som skal sende mails ud til alle i min database, men da der er tæt på 300 emails i min DB time out'er scriptet :( så jeg skal gøre bruge af LIMIT funktionen, men jeg ved ikke helt hvordan jeg sætter den til at kører f.eks række 0 - 50 og derefter 51 - 100 og så 101 - 150 osv.
det ser sådan ud nu:
$resultat = mysql_query("SELECT * FROM tabel ORDER BY `id` ASC LIMIT 0, 999");

Hvis der er en eller flere som kan hjælpe mig med dette vil jeg da gerne hører fra jer.

Håber i kan forstå hvad jeg mener

På forhånd tak

Per
Avatar billede mstorgaard Praktikant
08. marts 2007 - 13:19 #1
Er det noget i den her retning du leder efter?

$resultat1 = mysql_query("SELECT * FROM tabel ORDER BY `id` ASC LIMIT 0, 50");
$resultat2 = mysql_query("SELECT * FROM tabel ORDER BY `id` ASC LIMIT 50, 50");
$resultat3 = mysql_query("SELECT * FROM tabel ORDER BY `id` ASC LIMIT 100, 50");
$resultat4 = mysql_query("SELECT * FROM tabel ORDER BY `id` ASC LIMIT 150, 50");
$resultat5 = mysql_query("SELECT * FROM tabel ORDER BY `id` ASC LIMIT 200, 50");
$resultat6 = mysql_query("SELECT * FROM tabel ORDER BY `id` ASC LIMIT 250, 50");
$resultat7 = mysql_query("SELECT * FROM tabel ORDER BY `id` ASC LIMIT 300, 50");
Avatar billede Slettet bruger
08. marts 2007 - 13:45 #2
Ja, det tror jeg faktisk godt det kunne være :)
Kan jeg så f.eks lave det sådan her:

$resultat1 = mysql_query("SELECT * FROM ".$sqlemailtabel." ORDER BY `id` ASC LIMIT 0, 50");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat1)) {
echo $raekke['id']." ".$raekke['navn']." - Email: ".$raekke['email']." - ";
(Her der echo'er den om mailen er sendt eller ikke sendt)

$resultat2 = mysql_query("SELECT * FROM ".$sqlemailtabel." ORDER BY `id` ASC LIMIT 51, 50");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat2)) {
echo $raekke['id']." ".$raekke['navn']." - Email: ".$raekke['email']." - ";

osv.
osv.
osv.
???????

Per
Avatar billede Slettet bruger
08. marts 2007 - 13:54 #3
eller er det på nogen måde mulilgt at manipulere med timeout tiden, så den f.eks skal "køre" 200 sek før den laver timeout???
Avatar billede mccookie Seniormester
08. marts 2007 - 16:34 #4
Hejsa

<?php

$dato  = date('d-m-Y');
$time  = date('H:i:s');
$antal_mail = "5";
$i = "1";

$from    = "XXXX XXXX <XXX@XXXXXXX.XX>";
$to      = "xxx@XXXXXXx.xX";
$sujet  = "Test";

while($i <= $antal_mail) {

$content = "Dette er en testmail\n\nDato: $dato\nKl. $time\n\nDette er testmail nr.: $i ud af $antal_mail\n\n\";
mail($to, $sujet, $content,
      "From: $from\r\n"
      ."Reply-To: $from\r\n"
      ."X-Mailer: PHP/" . phpversion()); 
      echo $i . "<br />";
      $i++;
      flush(); }
   
?>

Den flush(); sørger for at dit script ikke timer ud....... ovenstående script har jeg afprøvet med 10.000 mails og det virkede ganske fint ;)
Avatar billede mccookie Seniormester
08. marts 2007 - 16:35 #5
og 300 forespørgelser i din database er noget nær ingenting.....
Avatar billede Slettet bruger
08. marts 2007 - 22:25 #6
Hej McCookie

det ser rigtig godt ud dit forslag, men hvis det ikke er at be om for meget, så vil jeg faktisk gerne bede om lidt hjælp til at lave hele scriptet færdig, da jeg stadig ser mig selv som nybegynder i PHP sproget :)
Jeg vil jo gerne have at den henter alle mail adresserne i min DB...
Hvis det er noget du gider bruge et øjeblik med at hjælpe mig med ville det sku være cool... Vi kan enten tage den over mail eller her (så kan jeg lige sende dig mit forslag til hvordan jeg tror det skal se ud), det er op til dig, men du må meget gerne skrive et svar om det er noget du gider hhjælpe mig med..
Per
Avatar billede mccookie Seniormester
09. marts 2007 - 12:47 #7
Vi kan tage den her på Eksperten.dk så kan andre måske også få glæde af det ;)

Jeg er nok meget lidt online i weekenden....men skyd løs.....


Mit forslag ville være noget ala:

<?php

$resultat1 = mysql_query("SELECT * FROM ".$sqlemailtabel." ORDER BY `id` ASC LIMIT 0, 50");

// Lidt mail vars

$from    = "XXXX XXXX <XXX@XXXXXXX.XX>";
$to      = "xxx@XXXXXXx.xX";
$subject  = "Test";


// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat1)) {


$resultat2 = mysql_query("SELECT * FROM ".$sqlemailtabel." ORDER BY `id` ASC LIMIT 51, 50");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat2))
    {
        extract($raekke); // Gør det lidt nemmere at arbejde hihi

        $content = "Hej $navn\n\n\nDin emailadresse er: $email";

        if(mail($to, $subject, $content,
              "From: $from\r\n"
              ."Reply-To: $from\r\n"
              ."X-Mailer: PHP/" . phpversion()))
                  {
                    echo "Mail afsendt med succes til: $navn med følgende emailadresse: $email<br>"; 
                }    else
                {
                    echo "Kunne ikke sende en mail til: $navn med følgende emailadresse: $email<br>";
                }
              flush();
    }
}
   
?>

Så skal du bare lige selv starte databasen og så videre..... prøv det..
Avatar billede Slettet bruger
09. marts 2007 - 16:03 #8
Hej
Kan godt få det til at virke delvist :)
Jeg har et problem med at forstå 1 af mail vars'ne:

  $to      = "xxx@XXXXXXx.xX";

Kan kun få det til at virke hvis jeg skriver en modtager email i stedet for XXX'erne, kan ikke lige finde ud af at få den til at gå ind i DB'en og hente alle adresserne ud.

Så ved faktisk ikke om den virker helt endnu.

Jeg har i toppen lavet en mysql_connect og db connect.

Per
Avatar billede mccookie Seniormester
10. marts 2007 - 01:48 #9
Min fejl...

<?php

$resultat1 = mysql_query("SELECT * FROM ".$sqlemailtabel." ORDER BY `id` ASC LIMIT 0, 50");

// Lidt mail vars

$from    = "XXXX XXXX <XXX@XXXXXXX.XX>";
$subject  = "Test";


// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat1)) {


$resultat2 = mysql_query("SELECT * FROM ".$sqlemailtabel." ORDER BY `id` ASC LIMIT 51, 50");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat2))
    {
        extract($raekke); // Gør det lidt nemmere at arbejde hihi
        $to = $email;
        $content = "Hej $navn\n\n\nDin emailadresse er: $email";

        if(mail($to, $subject, $content,
              "From: $from\r\n"
              ."Reply-To: $from\r\n"
              ."X-Mailer: PHP/" . phpversion()))
                  {
                    echo "Mail afsendt med succes til: $navn med følgende emailadresse: $email<br>"; 
                }    else
                {
                    echo "Kunne ikke sende en mail til: $navn med følgende emailadresse: $email<br>";
                }
              flush();
    }
}
   
?>
Avatar billede Slettet bruger
10. marts 2007 - 12:57 #10
Cool, så henter den sku adresserne i databasen :)

Når jeg så skal have den til at alle email adresserne igennem, så skriver jeg bare:


$resultat2 = mysql_query("SELECT * FROM ".$sqlemailtabel." ORDER BY `id` ASC LIMIT 51, 50");

while ($raekke = mysql_fetch_array($resultat2))


$resultat3 = mysql_query("SELECT * FROM ".$sqlemailtabel." ORDER BY `id` ASC LIMIT 101, 50");

while ($raekke = mysql_fetch_array($resultat3))

osv derud af, indtil jeg har nok $resultat variabler??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester