Bonjour,
Le script ci-dessous qui me pose problème me sert à mettre une table à jour.
J'ai donc la table stages et la table stages_temp.
Avec le script ci-dessous, je compte le nombre de stage présent dans stages_temp mais pas dans stages et ensuite je les récupère pour les ajouter à stages.
Voici mon code
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 // Je compte le nombre de stagiaire à ajouter. $sql = "SELECT COUNT(st.id) FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL"; $req_combien = mysql_query($sql); $nb_ajouter = mysql_fetch_row($req_combien); $nb_ajouter = $nb_ajouter[0]; unset($req_combien); // Je les ajoutes. $enreg=0; while($enreg<$nb_ajouter){ $sql = "SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT $enreg, 500"; $req = mysql_query($sql) or die(mysql_error()); while ($stagiaire = mysql_fetch_array($req)) { $sql = "INSERT IGNORE INTO stages( id, numero_client, statut, nom, prenom, date_enregistrement, date_inscription, date_stage, postal_stage, lieux_stage, site) VALUES( '" . mysql_real_escape_string($stagiaire['id']) . "', '" . mysql_real_escape_string($stagiaire['numero_client']) . "', '" . mysql_real_escape_string($stagiaire['statut']) . "', '" . mysql_real_escape_string($stagiaire['nom']) . "', '" . mysql_real_escape_string($stagiaire['prenom']) . "', '" . mysql_real_escape_string($stagiaire['date_enregistrement']) . "', '" . mysql_real_escape_string($stagiaire['date_inscription']) . "', '" . mysql_real_escape_string($stagiaire['date_stage']) . "', '" . mysql_real_escape_string($stagiaire['postal_stage']) . "', '" . mysql_real_escape_string($stagiaire['lieux_stage']) . "', '" . mysql_real_escape_string($stagiaire['site']) . "')"; mysql_query($sql) or die(mysql_error()); } $enreg = $enreg + mysql_num_rows($req); }
Les 10 premiéres lignes me serve à savoir combien j'ai de stagiaires à ajouter, ce qui donne 13422.
Ensuite je fais une boucle pour les ajouter par paquet de 500.
Mon problème est le suivant:
Avec la limite "$enreg, 500", il s’arrête à 6922 et je ne comprend pas pourquoi.
J'ai placé des echo pour essayer de comprendre, dont voici le résultat:
On voie ici qu'il y a bien 13422 ligne à ajouter.$sql:SELECT COUNT(st.id) FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL
$nb_ajouter:13422
Les premières requêtes dans la boucle se passe bien, il les ajoute 500 par 500.$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 0, 500
mysql_num_rows($req): 500
$enreg: 500
$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 500, 500
mysql_num_rows($req): 500
$enreg: 1000
... et ainsi de suite, il tourne en boucle et n'en fini jamais, puisque la requete ne renvoie plus aucun résultat après 6922 enregistrement.$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 1000, 500
mysql_num_rows($req): 500
$enreg: 1500
$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 1500, 500
mysql_num_rows($req): 500
$enreg: 2000
............... requête ok
$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 6000, 500
mysql_num_rows($req): 500
$enreg: 6500
$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 6500, 500
mysql_num_rows($req): 422
$enreg: 6922
$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 6922, 500
mysql_num_rows($req): 0
$enreg: 6922
$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 6922, 500
mysql_num_rows($req): 0
$enreg: 6922
$sql:SELECT st.id, st.numero_client, st.statut, st.nom, st.prenom, st.date_enregistrement, st.date_inscription, st.date_stage, st.postal_stage, st.lieux_stage, st.site FROM stages_temp st LEFT JOIN stages s ON s.id = st.id WHERE s.id IS NULL LIMIT 6922, 500
mysql_num_rows($req): 0
$enreg: 6922
............
Si je ne met pas de limite (donc tous d'un coup), c'est ok il enregistre bien les 13422.
J'ai essayé avec d'autre limite, pour voir ce que ça donne:
Avec la limite "$enreg, 100", il s’arrête à 6722.
Avec la limite "$enreg, 1000", il s’arrête à 7000.
Quelqu'un saurait-il me dire ce qui ne va pas ?
Merci d'avance.
Partager