Un SELECT sur une grosse base
7 messages
• Page 1 sur 1
- millowas
- WRInaute discret

- Messages: 54
- Inscription: 22 Jan 2006
Un SELECT sur une grosse base
Bonjour à tous !
Voila j'essaye de puis quelques temps de faire fonctionner ce script :
La table domaine ne fait que 200 enregistrements en revanche la table visiteur fait près de 1 049 675 d'entrées en progression.
Si ds la première requète je LIMIT à 5 domaine le script fonctionne en revance avec une plus grande valeur le script bloque au bout d'un moment, n'affiche rien sauf un tableau en double...
D'après vous où se trouve l'erreur je commence à tourner en rond.
merci par avance
Voila j'essaye de puis quelques temps de faire fonctionner ce script :
- Code: Tout sélectionner
$sql = mysql_query("SELECT id,domaine FROM domaine WHERE ban='1' ORDER BY in_day DESC ");
while($data=mysql_fetch_array($sql)){
$i++;
$tab[$i]["IN"] = $donnees[id];
$tab[$i]["ID"] = $data[id];
$tab[$i]["SITE"] = $data[domaine];
$sql2 = mysql_query("SELECT COUNT(*) FROM visiteur WHERE id_domaine ='$data[id]' AND time >= '$time2' AND f='in'");
$data2 = mysql_fetch_array($sql2);
$tab[$i]["IN"] = $data2[id];
$sql3 = mysql_query("SELECT COUNT(*) FROM visiteur WHERE id_domaine ='$data[id]' AND time >= '$time2' AND f='out'");
$data3 = mysql_fetch_array($sql3);
$tab[$i]["OUT"] = $data3[id];
}
La table domaine ne fait que 200 enregistrements en revanche la table visiteur fait près de 1 049 675 d'entrées en progression.
Si ds la première requète je LIMIT à 5 domaine le script fonctionne en revance avec une plus grande valeur le script bloque au bout d'un moment, n'affiche rien sauf un tableau en double...
D'après vous où se trouve l'erreur je commence à tourner en rond.
merci par avance
-

erestrebian - WRInaute occasionnel

- Messages: 473
- Inscription: 15 Juin 2007
si je comprends bien tu veux faire une requête qui te dis les gens qui rentrent et qui sortent par rapport à un domaine?
si c'est le cas, la liaison des tables et le group by sont tes amis dans tes requêtes et tu allègeras ta charge et ton temps d'exécution.
si c'est le cas, la liaison des tables et le group by sont tes amis dans tes requêtes et tu allègeras ta charge et ton temps d'exécution.
-

cedric_g - WRInaute accro

- Messages: 3552
- Inscription: 18 Jan 2006
Hello
Une seule requête devrait te permettre de laisser MySQL faire les calculs à ta place :
Bon pour la syntaxe c'est à revoir, je sais plus ce que MySQL supporte comme clauses ou pas, et comme je développe toute la journée avec du SQL Server, j'ai claqué une clause INNER JOIN mais je sais pas si MySQL supporte cela
Mais c'est pour l'idée.
Après tu récupères les données dans un tableau, ou tu auras dans la première colonne le décompte, la seconde le domaine, et la troisième le "in" ou le "out".
PS : pour le détail... Quand tu développes une base de données, nommes tes tables si possible "tbl_machin", le préfixe permet d'éviter de mélanger les noms de tables et les noms de champs !
Une seule requête devrait te permettre de laisser MySQL faire les calculs à ta place :
- Code: Tout sélectionner
SELECT Count(*) AS Decompte, visiteur.id_domaine, domaine.f FROM domaine INNER JOIN visiteur ON domaine.id=visiteur.id_domaine
GROUP BY visiteur.id_domaine, domaine.f
HAVING domaine.ban=1 AND time>$time2
Bon pour la syntaxe c'est à revoir, je sais plus ce que MySQL supporte comme clauses ou pas, et comme je développe toute la journée avec du SQL Server, j'ai claqué une clause INNER JOIN mais je sais pas si MySQL supporte cela
Mais c'est pour l'idée.
Après tu récupères les données dans un tableau, ou tu auras dans la première colonne le décompte, la seconde le domaine, et la troisième le "in" ou le "out".
PS : pour le détail... Quand tu développes une base de données, nommes tes tables si possible "tbl_machin", le préfixe permet d'éviter de mélanger les noms de tables et les noms de champs !
- Didier_S
- WRInaute impliqué

- Messages: 567
- Inscription: 24 Aoû 2004
pour le détail aussi: le tableau est en double car tu utilises mysql_fetch_array, qui renvoie le tableau avec des indexs texte (id, etc) ET numeriques. utilises mysql_fetch_assoc pour n'avoir que les indexs textes (ceux que tu utilises)
- millowas
- WRInaute discret

- Messages: 54
- Inscription: 22 Jan 2006
Si je comprend bien avec ta méthode mon script ne comptiendrai plus que 2 Select...
Ensuite j'utilise une boucle avec mysql_fetch_assoc après chak requète pour récupèrer les valeurs pour chaque domaine c'est à dire le nombre de IN et de OUT dans la table visiteur...
c ça ou pas ?
Ensuite j'utilise une boucle avec mysql_fetch_assoc après chak requète pour récupèrer les valeurs pour chaque domaine c'est à dire le nombre de IN et de OUT dans la table visiteur...
c ça ou pas ?
cedric_g a écrit:Hello
Une seule requête devrait te permettre de laisser MySQL faire les calculs à ta place :
- Code: Tout sélectionner
SELECT Count(*) AS Decompte, visiteur.id_domaine, domaine.f FROM domaine INNER JOIN visiteur ON domaine.id=visiteur.id_domaine
GROUP BY visiteur.id_domaine, domaine.f
HAVING domaine.ban=1 AND time>$time2
Bon pour la syntaxe c'est à revoir, je sais plus ce que MySQL supporte comme clauses ou pas, et comme je développe toute la journée avec du SQL Server, j'ai claqué une clause INNER JOIN mais je sais pas si MySQL supporte cela![]()
Mais c'est pour l'idée.
Après tu récupères les données dans un tableau, ou tu auras dans la première colonne le décompte, la seconde le domaine, et la troisième le "in" ou le "out".
PS : pour le détail... Quand tu développes une base de données, nommes tes tables si possible "tbl_machin", le préfixe permet d'éviter de mélanger les noms de tables et les noms de champs !
-

erestrebian - WRInaute occasionnel

- Messages: 473
- Inscription: 15 Juin 2007
c'est ça mais comme il l'a dit il faut changer la requête qui ne fonctionnera pas avec mysql (il me semble aussi qu'il faut que tu la rende mysql compatible). Ensuite, tu affiches le tableau en faisant le contrôle des valeurs que tu souhaite afficher ou pas.
7 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- select sur 2 base (ovh mutu)
- Question Grosse Base de 250 Mo ...
- Grosse base sql ou traitement php ?
- Transférer une grosse base de données
- Manipuler une grosse base de données MySql
- Importer une grosse base sur 240 plan ?
- Tri avec SELECT ..... IN SELECT ...
- Grosse hausse de visites, puis grosse baisse :(
- Importer tout son blog dans Google Base - 21-11-2005
- Outils Google pour les entreprises : Google Agency Toolkit - 01-03-2009
- Deux nouveaux blogs officiels : Google Talk et Google Base - 01-12-2005
- De la publicité ciblée dans les cartes de Google Local - 31-03-2006
- 2,5 milliards de requêtes par jour sur Google en juillet 2009 - 02-09-2009
- Articles de R et D sur le PageRank, le SpamRank et le spam... - 09-12-2005
- Les adresses IP de Google et Googlebot - 05-10-2006
- Liste des produits et services de Google - 07-12-2005
Consultez la description détaillée des produits ou services de Google suivants : Google Base, Google Local Business Ads
- Suggestion de mots-clés Google
Cet outil vous permet d'obtenir une liste de 10 mots ou expressions suggérés par Google sur la base d'un mot que vous fournissez.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

