Requête sur base access à un million de lignes [Résolu]

roro59650 99 Messages postés vendredi 20 avril 2007Date d'inscription 28 juillet 2011 Dernière intervention - 24 juin 2011 à 10:42 - Dernière réponse : roro59650 99 Messages postés vendredi 20 avril 2007Date d'inscription 28 juillet 2011 Dernière intervention
- 24 juin 2011 à 14:48
Bonjour à toutes et tous!

Voilà, je suis dans une petite panade...
Pour une appli, il faut que je lise une table sur une base Access, qui contient 1 150 000 lignes. Et ensuite, il faut que l'introduise sur une base MySql.
J'utilise PDO pour lire les base Access et MySql.
Mais je ne trouve pas comment faire pour qu'un variable puisse enregistrer un million de lignes... Car j'ai toujours un problème de "Fatal error: Out of memory (allocated 1702100992) (tried to allocate 44 bytes) in db.php on line 35".
function select($req, $values = NULL) {

if(!is_numeric($values) && $values == NULL) {
$values = array();
} elseif(!is_array($values)) {
$values = array($values);
}

$this->sth = $this->dbh->prepare($req);
$this->sth->execute(array_values($values));
$h_data = $this->sth->fetchAll(PDO::FETCH_ASSOC);

return $h_data;
}


J'ai donc une erreur sur la ligne "$h_data = $this->sth->fetchAll(PDO::FETCH_ASSOC);". J'ai beau augmenter la memory_limit à des valeurs folles (5 000 000M), ça ne change rien.
Si je fais un memory_get_peak_usage, il me met 1.58 GB quelle que soit la limite que je met...

Si vous avez une idée, s'il vous plait.

Merci!!

Romain
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
roro59650 99 Messages postés vendredi 20 avril 2007Date d'inscription 28 juillet 2011 Dernière intervention - 24 juin 2011 à 14:48
3
Merci
Merci pour vos réponses rapides!

Mais vu qu'il n'y a pas d'équivalence de Rownum, ou limit, je fait faire un TOP de la moitié des champs triés selon l'identifiant par ordre croissant ou décroissant.

Merci roro59650 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de roro59650
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 24 juin 2011 à 13:14
0
Merci
Est ce que tu peux séléctionner une parties des lignes avec un
SELECT * FROM TABLE WHERE ROWNUM<1000;


Si oui, tu peux faire la migration toutes les 10000 lignes à l'aide d'un programme.
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 24 juin 2011 à 13:15
0
Merci
augmenter la augmenter la memory_limit ne change rien, c'est les limites de la mémoire physique qui sont atteintes, a part ajouter de la ram, il n'y a rien à faire
Commenter la réponse de cs_Julien39
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 24 juin 2011 à 14:23
0
Merci
Alors ça remonte à trèèèèès longtemps..
J'avais utilisé la fonction TOP dans le SELECT (ROWNUM c'est Oracle non ??) et effacer N enregistrements et le tout en boucle..
Autre méthode, tu cherches dans une colonne toutes les valeurs distinctes et tu fais un select sur un filtre sur cette colonne et tu boucles..
S.
Commenter la réponse de syndrael

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.