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

Messages postés
99
Date d'inscription
vendredi 20 avril 2007
Dernière intervention
28 juillet 2011
- 24 juin 2011 à 10:42 - Dernière réponse :
Messages postés
99
Date d'inscription
vendredi 20 avril 2007
Dernière intervention
28 juillet 2011
- 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
Messages postés
99
Date d'inscription
vendredi 20 avril 2007
Dernière intervention
28 juillet 2011
- 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é 88 internautes ce mois-ci

Commenter la réponse de roro59650
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
- 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
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
- 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
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
- 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.