Hallo,

Ik heb een MySQL query die 13 sec duurt nu is mijn vraag kan ik 1e gewoon mijn html pagina en dat die query op de achtergrond wordt uitgevoerd en als hij dan klaar laat ie zien wat ie terug heeft gehad.
Je kan eerste html opleveren die een AJAX request verstuurt. De AJAX zal dan het resultaat van de query terug krijgen in een of andere vorm (html/xml/json/csv/iets anders), dan kun je verder via javascript zorgen dat de gebruiker de data op zijn scherm krijgt.

Hoe komt het dat de query zo traag is? Wat doe je ooit?
Ik heb 4,5 miljoen rije en elek rij vergelijk ik met 50.000 rije uit een andere tabel dus vandaar
Misschien dat je je query kunt posten.
Het zou zomaar kunnen door de query slimmer te maken een behoorlijke snelheidswinst te behalen is.

Denk daarbij aan indexen plaatsen e.d.
Heb je al eens een EXPLAIN uitgevoerd op de query?
Je kunt een PHP-proces forken.

Als je echter toch een HTML-pagina wilt tonen met de uitkomst, kan dat bijvoorbeeld met een doodgewoon <iframe> wanneer je niet afhankelijk wilt zijn van Ajax en JavaScript.
<?php

SELECT
count(uid) as uid
FROM
`table`
WHERE
hostname NOT IN (SELECT
url
FROM
Hosters)
GROUP BY hostname
HAVING uid > 20

?>
Peter de Beer op 19/11/2013 11:39:32

Ik heb 4,5 miljoen rije en elek rij vergelijk ik met 50.000 rije uit een andere tabel dus vandaar


Indien gewenst ...

Je zou met Ajax de query kunnen triggeren (is al verteld).
Eventueel kan je dit doen met meerdere verzoeken. Je houdt in javascript een teller bij, en elk verzoek doe je dan een half miljoen rijen.

In dat geval heb je dus ook een progress bar, zowat gratis.

Interesse?
Kris Peeters op 19/11/2013 13:12:43

[quote="Peter de Beer op 19/11/2013 11:39:32"]
Ik heb 4,5 miljoen rije en elek rij vergelijk ik met 50.000 rije uit een andere tabel dus vandaar


In dat geval heb je dus ook een progress bar, zowat gratis.

Interesse?
[/quote]


Wat? heb je iets te koop ?
Nee, gratis van "hé, die krijg je er bijna automatisch bij als je dit inbouwt".

En volgens mij kun je jouw query sneller maken met gebruik van JOINs (maar ik ben geen expert hierin...)
Peter de Beer op 19/11/2013 13:26:41

Wat? heb je iets te koop ?


Ik bedoel: is het de moeite waard dat ik notepad2.exe boven haal en begin te typen aan een voorbeeld scriptje.


Hier dus een voorbeeldje
Copy/paste dit in een leeg .php bestand

<?php
if (!empty($_GET['ajax'])) {
  // ajax verzoek
  // $_GET['index'] is eerst 0, dan 1, dan 2 ... 
  if ($_GET['index'] > 10) {
    echo -1;
    exit;
  }
  sleep(1); // bij jou duurt 1 tiende van jouw query ongeveer een seconde
  echo '$_GET["index"]: ' . $_GET['index'];
  exit; // nooit vergeten na een Ajax verzoek.  Anders wordt de rest van de code nog uitgevoerd
}
?>
<!DOCTYPE html>
<html>
<head>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script>
  var index = 0;
  $(document).ready(function() {
    var button = $('#button');
    var messages = $('#messages');
    // events
    button.on('click', function(e) {
      trigger_sql();
    });
    function trigger_sql() {
      $.ajax({
        url: '?ajax=1',
        data: {index: index},
        success: function (data) {
          if (data == -1) {  // indien de server -1 terug geeft, zien we dit als een resultaat om te stoppen
            return;
          }
          else {
            messages.html(
              'bericht van de server: ' + data
              + '<br> progress: ' + (100 * index / 10) + '%'
            );
          }
          index++;
          trigger_sql();
        }
      });
    }
  });
  </script>
</head>
<body>
  <input type="button" id="button" value="KLIK">
  <div id="messages"></div>
</body>
</html>

Reageren